域服務實現應該放在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