繁体   English   中英

域模型工厂可以调用存储库吗?

[英]Can a Domain Model Factory Call a Repository?

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

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

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

-1上:

我认为这与Domain完全无关。 我认为这是一个应用规则。

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

请记住:域名指向“我们所处的业务”而不是“我们如何开展业务”。

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

订单可能有一个构造函数,比如订单(供应商供应商) - >将迫使na订购供应商。

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

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

布鲁诺

简单地回答你的问题是肯定的。

它可以,并且有一个非常具体的情况,工厂需要调用存储库。 当ORM(例如NHibernate HiLo )生成Aggregate标识时,Repository将公开一个类似的方法

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

如果Aggregate构造足够复杂,值得拥有专用工厂,那么从工厂调用'Generate'是很自然的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM