`

dao domain的理解,领域对象设计.

    博客分类:
  • j2ee
阅读更多

dao domain的理解

一,Service ->DAO ,只能在Service 中注入DAO 。 

二,DAO 只能操作但表数据,跨表操作放在Service 中,Service 尽量复用DAO ,只有一张表产生的业务放入DAO 中。 

三,事务操作,放在一个DAO 中。 

四,如果有更大Service 的之间的复杂调用,考虑在service 上再加Facade层(Components组件)。 

五,多考虑这部分代码放在哪里,多里利用上下分层,增加代码可读性,提高代码复用率。 

服务层处理业务逻辑,DAO 封装Entity对象,Action作为Controller处理分发。 
业务逻辑是最容易变化的地方,当业务改变时,只增加修改相应的代码即可。真正享受分层带来的益处。 

文章出处:http://www.diybl.com/course/3_program/java/javaxl/2008620/126932.html 
  
 J2EE分层设计是Java企业应用的最基本的设计思想。 

  从最常规的分层结构来说,系统层次从上到下依次为: 

  表现层:主要是客户端的展示。 

  服务层:直接为客户端提供的服务或功能。也是系统所能对外提供的功能。 

  领域层:系统内的领域活动。 

  DAO 层:数据访问对象,通过领域实体对象来操作数据库。 

  其中有些指导原则: 

  1、上层总是依赖其下层,依赖关系不跨层。 

  2、表现成除外,同一层之间方法不允许相互调用。这是实际开发中一些开发者容易范的错误!如果真是同一层之间存在方法调用,需要注意,这些调用都是一些上层不可见方法,比如一些工具方法等。 

  3、一切从服务层出发,从系统需要提供的功能进行分析,确定Service 接口中的方法。而不是从数据库的表出发,创建DAO ,再创Domain,然后Service ,这实际上是对系统分层的误解。 

  4、系统最核心的设计就是将系统中的实体划分为领域模型。在此基础上设计数据的DAO 层,并将这些活动暴露给服务层,服务层的实现依赖于领域活动。 

  5、每个接口的职责范围明确有界。 

  在我所做的系统中,常常看到一些糟糕的编码:系统设计从表开始,一个表对应一个DAO ,一个DAO 对应一个domain,一个Domain对应一个Service ,实际上Service 的接口和DAO 的接口基本上完全一样!导致Service 的接口方法超多!到了表现层,前台程序员在写Action的时候,Action中反复的调用Service 方法,代码不堪入目。 

  正确的设计应该是,一个领域活动会聚合对应一个或一组DAO ,来完成一个领域活动。而一个服务可能包含两个领域活动,比如一个转账的业务,对应两个领域活动。两个帐户的金额分别发生变化,需要操作一组领域活动,而每个活动需要操作很多表(调用多个DAO )。 事务的控制我们可以放到Service层。 

  目前,越来越多的架构师喜欢领域模型驱动设计,针对系统的领域模型建模,然后上层直接是ServiceService 下面就是领域活动层Activity,从而去掉了DAO 层,这样做的优点是系统设计思路更清晰,目标更明确。可以避免上面所说的一个表对应一个DAO 、Service 的情况。 

  但缺点是当领域活动发生变化的时候,会引起领域活动层代码的变化。并且,当要更换持久化框架或者技术时候,领域活动要重新实现。 

  但综合考虑起来,这样带来的优点也很多,而实际上更换数据库和持久化框架的情况很少,因此这样的设计也是有其合理性一面的。这样做实际上是将原来的DAO 和Domain层合并为一个Activity.但上层的设计思路还是一致的。 

  其实Service 层的设计也很讲究,其中就是要控制Service 的数量,从Service 层往下,接口数量逐层增加。通常将一个模块的服务都集中到一个Service 中来处理。 

  每层中的每个接口都应该关注的是自己的那一块,而不是吃着碗里看着锅里,牛槽伸出个狗舌头,最典型的例子就是一个DAO 中胡乱操作别的表。这种凌乱的实现只会置项目经理与死地。也会为软件的维护带来很大代价。 

  笔者曾遇到这样的团队,缺乏对整个项目的整体设计,一个表一个DAO ,对应一个Service ,系统也不大,三四十张表,但是性能相当地下,经常down机。 

  最终发现,失败不是开源框架和数据库以及应用服务器和硬件配置的错,根源在于拙劣的设计导致。 

分享到:
评论

相关推荐

    java代码 根据domain自动生成DAO层 小tool(功能有待又垒加)

    根据提供的标题和描述,我们可以推测这是一个基于特定domain(领域模型)自动生成DAO层代码的小型工具,其功能可能还有待扩展和增强。 首先,我们需要理解DAO层的基本概念。DAO是数据访问对象,它提供了一种方法来...

    Java MVC framework, agile, fast, rich domain model, made e.zip

    一个丰富的领域模型可以帮助开发者更好地理解和表达业务,同时通过合理的对象设计优化性能。 "made easy"可能是指使用特定的Java MVC框架可以简化开发过程,使得复杂的Web应用开发变得容易上手和管理。例如,Spring...

    关于dao设计模式学习资料

    从这段代码中可以看出,通过DAO模式对各个数据库对象进行封装,业务层仅需关注与本领域相关的逻辑对象和算法,而不需要处理底层的数据库访问细节。这种做法使得业务逻辑更加简洁明了,易于理解和维护。 #### 五、...

    领域驱动设计中的实现方式

    领域驱动设计(Domain-Driven Design,简称 DDD)是一种软件开发方法,强调通过深入理解和建模业务领域,来创建能够反映领域专家思维的高质量软件。在这个过程中,领域模型是核心,它代表了业务规则和业务行为。在...

    action层,dao层 ,service层,entity层1

    在软件开发领域,尤其是Java Web应用中,我们经常会遇到一种分层架构的设计模式,这种模式将应用程序的不同功能划分到不同的层,以便于管理和维护。标题和描述中提到的"action层,dao层,service层,entity层"是这种...

    面向对象UML设计与应用

    ### 面向对象UML设计与应用 #### 一、引言 随着软件工程的发展,面向对象(Object-Oriented, OO)方法已经成为软件开发领域的重要范式之一。统一建模语言(Unified Modeling Language, UML)作为一种标准化的可视...

    项目model、Dao层、业务层建模工具类

    在IT行业中,建模是软件开发过程中的一个重要环节,它帮助我们清晰地理解系统的结构和功能,便于设计和实现。本资源提供了一种用于项目model、Dao层、业务层建模的工具类,旨在简化开发流程,提高代码复用性。下面...

    dorive轻量级领域驱动框架,帮助开发者通过建模,快速构建具有可维护性、可拓展性的应用程序

    该框架的核心理念是领域驱动设计(Domain-Driven Design,简称DDD),这是一种软件开发方法论,强调将业务领域知识转化为软件设计,以提高复杂系统的理解和管理。 在领域驱动设计中,核心概念包括领域模型(Domain ...

    图书馆管理系统详细设计说明书.doc

    - **定义**:系统采用了JavaEE的分层模型,包括Domain Object层(领域对象)和DAO层(数据访问对象)等。 2. **第0层设计描述**: - **软件系统上下文定义**:这是对系统在更大环境中的定位,描述了系统与外部...

    毕业设计-Java 物资管理系统.zip

    项目按照模块化设计,分为`material_admin-dao`(数据访问层)、`material_admin-service`(业务逻辑层)、`material_admin-common`(公共组件)、`material_admin-domain`(领域模型)和`material_admin-web`(Web...

    学生基本信息管理系统

    程序使用了多个包,如`com.Student.dao`、`com.Student.domain`、`com.Student.service`和`com.Student.servlet`,以及相关的工具类`com.Student.util`,这些包分别负责数据访问对象(DAO)、领域模型、业务逻辑和...

    3、前置知识pdf资料

    1. 领域对象(Domain Object)层:这一层的核心是Plain Old Java Object (POJO),它们代表业务领域的实体,封装了业务逻辑。例如,如果你正在开发一个电商应用,那么Product、Order或Customer等类就属于领域对象。 ...

    J2EE企业级项目开发-3期(KC007) 2.7 J2EE应用程序组件文档.doc

    5. 领域对象组件(Domain Object Components): 领域对象代表了系统的业务实体,它们通常映射到数据库中的数据表。领域对象包含了业务实体的状态和行为,是业务模型的抽象。每个领域对象可能对应一个或多个数据库...

    毕业设计——人力资源管理系统

    通过以上解析,我们可以看出,《毕业设计——人力资源管理系统》不仅展示了作者在Java方向的深厚技术功底,也反映了其对现代人力资源管理理念的深刻理解,是一份兼具理论深度和实践价值的研究成果。

    人事管理系统学校实战项目

    【标签】中的"domain"指的是领域模型,它是业务逻辑的抽象,包括实体类和值对象,如Employee类,用于表示员工信息。"DAO"(Data Access Object)层是数据库交互的接口,负责将业务层与数据库操作解耦。"servlet"是...

    bank-info-master.zip

    本项目“bank-info-master.zip”是一个基于JavaWeb的简单银行ATM系统实现,它涵盖了数据库操作、领域模型、Servlet服务、以及数据访问对象(DAO)等核心组件。这个系统旨在提供基础的账户管理功能,如添加、删除、...

    Java专业术语标准化规范表.doc

    33. **DSL(Domain-Specific Languages)** - 特定领域语言,针对某一特定领域设计的编程语言。 34. **DTOs(Data Transfer Objects)** - 数据传输对象,用于在网络或系统之间传输数据的对象。 35. **EAI...

    网上图书商城-项目开发总结报告.pdf

    数据库设计依据领域对象(Domain)进行,每个Domain类都对应一个数据库表,并且类的字段与数据库列名保持一致。DAO层通过反射技术实现了通用性,确保所有Domain对象都能进行数据库操作。Service层则通过反射技术创建...

    java专业术语.pdf

    14. Data Access Object(DAO):数据访问对象,是一种设计模式,用于将数据访问逻辑与业务逻辑分离。 15. Database Management System(DBMS):数据库管理系统,是用于创建、管理和操作数据库的软件系统。 16. ...

    Maven搭建SSM框架示例

    6. **创建实体类和Mapper接口**:为业务逻辑创建领域对象(DO)和数据访问对象(DAO),并编写对应的Mapper接口。在MyBatis中,Mapper接口可以用于执行SQL操作。 7. **编写Mapper XML文件**:对于每个Mapper接口,...

Global site tag (gtag.js) - Google Analytics