域、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 和服务层的主要内容,如果未能解决你的问题,请参考以下文章