服务层和域模型层有什么区别

例如,我有一个用户表,要进行分层,我创建这样的POJO:

UserEntity.java
UserDao.java
UserBO.java(业务对象,域模型?
用户服务.java(用于服务层)

UserBO.java和UserService.java有什么区别?为什么我们把它分成两个对象?


答案 1

域模型包含与成为用户的含义相关的信息和功能。它应该在概念上映射到现实世界中物理上存在的东西或问题空间中明确定义的概念上。

服务包含与执行原子工作单元相关的信息和功能。它应该在概念上映射到在域模型上或由域模型的成员执行的任务上。通过单击应用程序中的按钮执行的单个原子任务通常涉及域的许多成员一起工作,除非您的应用程序只是一个 CRUD-y 电子文件柜。


答案 2

实体:映射到问题域中的某种实体(=感兴趣的对象)的东西。在某些情况下 (DDD),存在丰富的域模型,其中实体具有可以操作模型状态的方法。更保守的方法是使它们贫血(除了getters和setters之外没有其他方法)。通常,实体类最终会映射到数据库表。

BO:我猜这是某种数据传输对象。有些人非常担心将实体的访问限制为仅对应用程序的有限部分,并且他们喜欢将数据从实体复制到 DTO 中。因此,服务可能从 DAO 接收实体,然后将其复制到 DTO 中,该 DTO 是服务调用方将返回的内容。

数据访问对象提供了一种查询或更新数据的方法,它可以具有返回实体或实体集合的查询方法。DAO通常不定义数据库事务,它们让服务这样做。

服务是执行某些任务的东西,例如,不同的用例通常不会沿着实体线干净利落地分解。此外,服务通常涉及实体尝试避免的依赖项(因为域模型是关于建模状态和对状态的更改,而依赖项是关于基础结构的)。服务可能具有为某些用户实现用例的方法,其中每个方法都是事务性的。


推荐