域、DAO 和服务层

Posted

技术标签:

【中文标题】域、DAO 和服务层【英文标题】:Domain, DAO and Service layers 【发布时间】:2013-05-27 14:08:44 【问题描述】:

我需要了解应该在对象内部的方法类型(就业务逻辑而言)之间的区别。

例如,如果我正在构建一个小型 Web 应用程序来创建、编辑和删除客户数据,据我所知,在域层对象中,我应该添加获取/设置客户对象属性的方法,例如(getName、getDOB , setAddress, setPhone...等)。

现在我要学习的是我应该在 DAO 和服务层对象中放置什么方法。

提前感谢您的时间和努力。

【问题讨论】:

【参考方案1】:

概括地说(不是 Hibernate 或 Spring 特定的):

DAO 层包含查询和更新,以将您的域层保存到您的数据存储区(通常是关系数据库,但并非必须如此)。使用接口将您的 DAO 从实际数据存储中抽象出来。这并不经常发生,但有时您想更改数据存储(或使用模拟来测试您的逻辑),而接口使这更容易。这将具有“save”、“getById”等方法。

服务层通常包含您的业务逻辑,并协调领域层和 DAO 之间的交互。它将具有对您的特定域有意义的任何方法,例如“verifyBalance”或“calculateTotalMileage”。

【讨论】:

能否提供DAO层下的方法示例?据我了解,服务层对象下应具有verifyBalance、calculateTotalMileage 等方法,据我所知这些都是计算方法 @MChan - DAO 主要关注从数据库中更新、创建、删除和检索数据。对于非对象数据存储,它还会执行从持久数据(RDB 中的行和列)到对象的映射,以及从对象到持久数据的映射。方法名称可以是任何你想要的,但通常是“保存”、“删除”、“查询”、“更新”之类的。服务层不必有计算方法。这些方法将是您的业务需要确定或执行的任何操作。【参考方案2】:

DAO:用于“包装”JPA 或 JDBC 或 SQL 或 noSQL 调用或任何访问数据库系统的“包装器”方法。

域:与单一类型的实体(域对象)相关的业务逻辑调用。

服务:与一组类型的实体或一组相同类型的多个实体相关的业务逻辑调用。

(我不太清楚英语,抱歉.......)

意思是: 服务层比领域层“大”,往往靠近前端,经常调用或使用多个领域对象。

域对象为域的一部分封装了大部分内容(这就是它们被称为 D.O. 的原因)

DAO 只是技术性的,有时需要,有时不需要。 当使用真正的域对象时,通常会使用“存储库”来隐藏对数据库系统的访问,或者添加特殊的数据库功能或其他任何东西。

前端 --> 服务方式一 --> d.o. X 型 A,d.o. X类型的B,列表

【讨论】:

如果我使用的是Hibernate,那么DAO对象方法有什么用呢?我的意思是他们如何帮助我访问数据?

以上是关于域、DAO 和服务层的主要内容,如果未能解决你的问题,请参考以下文章

带有休眠的 DAO 和服务层

Action、Dao、DaoImpl、Service、ServiceImpl各自的作用是啥 他们之间有啥关系

DAO与DTO

创建服务层和DAO层(接口+实现)或仅实现

JPA 和 EJB 以及分离的 DAO 和服务层

了解服务和 DAO 层