域服务实现应该放在DDD项目结构中? 如果我们有IDomainInterface
和DomainInterface
的实现,DomainInterface
实现是否应该驻留在解决方案/项目的基础架构或核心/域部分?DDD:在哪里实施域服务
回答
域服务接口及其实现可能驻留在域层。但是,如果域服务实现依赖于基础设施问题,那么通过应用依赖性反转原则,实现将存在于基础设施层中,同时取决于域中定义的接口。
大多数域服务将不需要依赖于基础设施问题,并且将用于建模在现有聚合中找不到自然住宅的用例,但某些域服务将会。
存储库是最常见的领域服务,需要基础架构知识,因此您会发现他们的实现存在于基础架构层中,但还有其他示例。
例如,在IDDD身份&访问有界上下文中,EncryptionService接口位于域中,而MD5EncryptionService具体实现位于基础结构中。
域服务的接口和实现都应驻留在域(核心)层中。更具体的说,接口和实现应该与服务使用的域对象位于同一个模块(名称空间)中。
实现的位置是什么定义它是什么类型的服务,即应用程序,域或基础架构服务。
注意将域概念建模为服务,因为它可能导致域逻辑驻留在服务中而不是实体和值对象中的anemic domain model。
这个答案是非常不正确的。例如,存储库是一个域服务,它的实现不应该存在于域中。 – plalx
我同意存储库实现不应该存在于域中,因为它是基础设施服务,因此**不是域服务。其他人也表达了同样的观点“存储库的实施也是基础设施服务的一个例子。” - http://gorodinski.com/blog/2012/04/14/services-in-domain-driven-design-ddd/和http://stackoverflow.com/a/2279729/441292 – Martin4ndersen
从域的角度来看,任何在域中定义的服务接口是域服务,与其实现无关。 – plalx
- 1. DDD:在哪里放置域名事件
- 2. 在哪里实施CLLocationManager
- 3. 在哪里把业务逻辑在DDD
- 4. DDD:在哪里创建实体对象?
- 5. 实施DDD封装
- 6. DDD:哪里坚持非域数据?
- 7. DDD + node.js:域逻辑去哪里
- 8. 区域服务器在哪里等?
- 9. 在哪里实施Zend_ACL与域对象和数据映射器?
- 10. TIOCMGET应该在哪里实施?
- 11. DeviceMotionEvent目前在哪里实施?
- 12. 内置功能在哪里实施
- 13. 延期说明在哪里实施?
- 14. tcp:在哪里实施3way握手
- 15. 实施Alamofire到DDD结构
- 16. DDD - 如何实施工厂
- 17. 在Android中实施服务
- 18. WCF服务实施
- 19. 业务规则应该在哪里实施?
- 20. ddd - 我的服务是域名服务还是应用服务?
- 21. 基础设施服务合同在哪里生活?
- 22. 在哪里可以找到“域服务类”和“身份验证域服务”?
- 23. DDD +内部WCF服务公开域
- 24. DDD/DI(Unity)/ .NET /组合根 - 域服务
- 25. 哪里可以成功实施noSql?
- 26. 在哪里把这些查询DDD
- 27. DDD:持久性实体更新逻辑在哪里?
- 28. BDD/DDD在哪里放置基本实体验证规范?
- 29. 我应该为连续后台任务实施哪种服务?
- 30. 坚持实施Windows服务
域服务与基础设施无关 –
只有基础设施问题,例如存储库,将在基础架构层中实施。域服务及其与存储库的交互将在域层中实现。 [AuthorizationService](https://github.com/VaughnVernon/IDDD_Samples_NET/blob/90fcc52d9c1af29640ec2a8a3e0e7c692f3e6663/iddd_identityaccess/Domain.Model/Access/AuthorizationService.cs)from [Implementing Domain-Driven Design](https://www.amazon.com)/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577)就是这样一个例子。 – Martin4ndersen
@AlexeyZimarev知识库是一个域服务。尽管大多数域名服务不必依赖于基础设施的细节,但有些会。例如,您可以在身份和访问有界上下文中使用加密域服务,因为它使用某些第三方加密库,因此实施位于基础架构中。 – plalx