在我们的DDD项目中,我们使用Factory来创建我们的初始聚合根模型'Order'。有一项业务规则称新订单的供应商'Order.Supplier'默认为特定供应商。我们需要从数据库中获取默认供应商。
在创建初始订单以获取默认值时,是否可以在订单工厂中调用供应商存储库?我知道工厂的目的是在有效状态下创建模型。有效的新状态需要设置默认值。在这种情况下,我是否可以调用存储库,还是应该将默认供应商传入工厂构造函数?
答案 0 :(得分:2)
+1关于Factory OR 一个DomainService可以访问一个存储库的事实。
BUT
-1 on:
我认为这与Domain完全无关。我认为这是一个应用规则。
与我一起思考:如果企业现在决定默认供应商是另一个供应商,该怎么办?这是一项规则,需要改变您的业务吗?这需要改变你的工厂吗?那可以吗?
请记住:域名指向“我们所处的业务”而不是“我们如何开展业务”。
我宁愿把它放在ApplicationService上。域名不需要知道是否有默认供应商。无论如何,它可能需要“供应商”。
订单可能有一个构造函数,比如订单(供应商供应商) - >这将迫使na订购供应商。
或工厂可能会在其方法中收到DefaultSupplierId。
但域名应该永远不会知道。在我看来,它不适合那里。
布鲁诺
答案 1 :(得分:1)
简单回答你的问题,简单来说就是。
答案 2 :(得分:0)
它可以,并且有一个非常具体的情况,工厂需要来调用存储库。当ORM(例如NHibernate HiLo)生成聚合标识时,存储库将公开类似
的方法class SomeRepository {
...
Identity Generate();
...
}
如果Aggregate构造足够复杂,值得拥有专用工厂,那么从工厂调用'Generate'是很自然的。