我正在编写一个考虑到 DDD 的应用程序,并试图通过将域逻辑和行为委托给实体来避免出现贫血的域模型。在构建作为聚合根的实体并且需要创建需要由工厂类处理的子实体时,我遇到了一个问题。这是一个例子:
我有以下实体Page
:Url
和Layout
。使我的模型中的 Page 是Page
aUrl
和 a Layout
- 没有这两个,Page
对象将无效。在一个简单的模型中,Page
构造方法将简单地将这两个对象创建为私有属性。但是,Url
有一个特定的要求;它必须从页面的标题(或 slug)创建,并且必须是唯一的(通过附加“-1”、“-2”或类似的东西来确保)。这需要与存储库进行通信。
我最初的想法是将UrlFactory
对象传递/注入到Page
构造函数并Page
创建Url
它需要的对象,但我一直在阅读有关如何将服务注入实体是一个坏主意的信息。
所以,我的问题是;有没有一种方法——或一种既定的模式——允许实体在没有贫乏的域模型的情况下构建其复杂的子实体,或者在这种情况下注入工厂是一种有效的解决方案?