Architecture 域服务与应用程序服务
域服务和应用程序服务之间的主要区别是什么?(我正在使用NHibernate) 哪一层更适合业务逻辑?什么是最佳实践Architecture 域服务与应用程序服务,architecture,Architecture,域服务和应用程序服务之间的主要区别是什么?(我正在使用NHibernate) 哪一层更适合业务逻辑?什么是最佳实践 -S#体系结构使用应用程序服务作为“协调层”,但不必解释为什么它不是域服务,而应该是业务逻辑。您的里程可能非常长,但我将尝试根据我使用它们的方式来定义。不管您的持久性层是什么,我都会将它们定义为实际使用: 域服务—用于加强域的完整性并促进插入、创建、删除和检索域数据的服务。此外,域服务可以将域对象的更高级别组合编排到viewmodels中。通常,这些是存储库顶部的外观,用于隐藏一
-S#体系结构使用应用程序服务作为“协调层”,但不必解释为什么它不是域服务,而应该是业务逻辑。您的里程可能非常长,但我将尝试根据我使用它们的方式来定义。不管您的持久性层是什么,我都会将它们定义为实际使用:
- 域服务—用于加强域的完整性并促进插入、创建、删除和检索域数据的服务。此外,域服务可以将域对象的更高级别组合编排到viewmodels中。通常,这些是存储库顶部的外观,用于隐藏一些低级实现,并提供更符合UL(普适语言)的接口,以帮助管理期望
- 应用程序服务-特定于域模型实现或不依赖于域模型的服务。一个典型的例子是根据域中的状态更改或操作发送和发送电子邮件。这通常是应用程序本身的一个需求,并且可能不是由域模型指定的。这可以由应用程序服务在调用域服务后按程序执行,也可以作为从域服务引发的事件执行
- 域服务是域内由多个需要重用的类组成的服务
- 应用程序服务是一些util类,在这些类中可以完成压缩或sms消息传递等技术工作
请将逻辑放入域对象而不是服务中。在复杂域中更好地重用。我认为@Karsten在评论中引用的帖子比@joseph.ferris在这里发布的最上等答案更可信 域服务用于“域中非实体或价值对象自然责任的重要过程或转换”(Eric Evans域驱动设计) 应用程序服务只是应用程序(或其他外部消费者)的一种门面或API,它们通常对应于应用程序的一个用例,是接口客户端层所需的一组应用程序操作。它们不包含业务逻辑,也不包含任何领域专家有一天可能会来要求更改的内容。它们可能包含事务管理(工作单元)、应用程序验证(验证从数据库检索到的对象的状态/保存到数据库的输入)、安全验证和横切关注点,如日志记录、缓存等,并将域对象编排到视图模型中。当您有多个客户端(例如Web API和MVC)并且用例响应涉及多个事务资源时,它们特别有用(请参阅Martin Fowler的企业应用程序架构模式中的“服务层”部分)
应用程序服务可以包含对存储库的调用,以获取填充有数据的域对象,然后它们可以调用域对象或域服务上的某些方法,并再次调用存储库以持久化修改后的域对象。它们通常比域服务“更广泛”,因为它们包含整个用例。@BornToCode如果跨域跨功能,那么是的