【发布时间】:2012-04-06 21:16:04
【问题描述】:
我正在开发一个具有在域模型上运行的服务层的应用程序。在当前设计中,我通过服务层向上传递域对象(例如,在调用 EmploymentService.getEmployee() 时返回一个 Employee 域对象,但要求对对象执行的操作通过服务进行(例如 EmploymentService.transferEmployee( int employeeId, int newLocationId)。(示例顺便说一句,是人为的)。
我觉得这有点不对劲。一,它看起来像过程编程。第二,域对象具有像Employee.setLocationId 这样的设置器,客户端可以调用它当然不会将员工转移到新位置,因为假设转移员工所需的协调不同系统的所有复杂操作都在服务中层。
如果我可以对客户端隐藏设置器,我会感觉更好,但是不同包中的 ServiceLayer 和 DAO 都需要能够访问域对象的设置器。
这种事情可以吗,还是有更好的方法? (此外,任何具有底层域模型的服务层的真实示例都将受到欢迎!)
另外,我已经阅读了贫血域模型反模式,我不认为我落入了那个陷阱,但我不完全确定!
【问题讨论】:
-
我不确定它是否能完全解决问题,但如果可能的话,传递业务对象而不是原语不是更有意义吗?例如:
EmploymentService.transferEmployee(Employee emp, Location newLoc)无论哪种方式,+1 表示关心。
标签: java design-patterns domain-driven-design