2

在我们的 DDD 项目中,我们使用工厂来创建我们的初始聚合根模型“订单”。有一条业务规则规定,新订单的供应商“Order.Supplier”默认为特定供应商。我们需要从数据库中获取默认供应商。

在创建初始订单时是否可以调用Order工厂中的供应商存储库以获取默认值?我知道工厂的目的是在有效状态下创建模型。有效的新状态需要设置默认值。在这种情况下,我可以调用存储库还是应该将默认供应商传递给工厂构造函数?

4

3 回答 3

3

+1 关于 Factory OR a DomainService 可以访问存储库的事实。

-1 上:

我认为这与域根本无关。我认为这是一个应用程序规则。

跟我一起想一想:如果企业现在决定默认供应商是另一个供应商怎么办?这是一个需要改变你的业务的规则吗?这需要改变你的工厂吗?可以吗?

请记住:域指向“我们从事哪些业务”,而不是“我们如何开展业务”。

我宁愿把它放在 ApplicationService 上。域不需要知道是否有默认供应商。无论如何,它可能需要一个“供应商”。

Order 可能有一个构造函数,比如 Order(Supplier supplier) - > 这将强制一个订单有一个供应商。

或者,工厂可能会在其方法中收到 DefaultSupplierId。

但是域永远不应该知道它。在我看来,它不适合那里。

布鲁诺

于 2013-05-21T22:16:15.233 回答
1

您的问题的简单答案是,是的。

于 2013-05-06T20:19:34.833 回答
0

它可以,并且有一个非常特殊的情况,工厂需要调用存储库。当 ORM 生成聚合身份时(例如NHibernate HiLo),存储库将公开一个类似的方法

class SomeRepository {
    ...
    Identity Generate();
    ...
}

如果聚合结构足够复杂,值得一个专门的工厂,那么从工厂调用“生成”是很自然的。

于 2013-05-09T17:54:25.417 回答