domain-driven-design - 领域模型工厂可以调用存储库吗?

标签 domain-driven-design factory

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

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

最佳答案

+1 事实是工厂 DomainService 可以访问存储库。

但是

-1 于:

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

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

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

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

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

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

但是域名永远不应该知道它。我认为它不适合那里。

布鲁诺

关于domain-driven-design - 领域模型工厂可以调用存储库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16405908/

相关文章:

Javascript:将构造函数作为变量中的引用传递并调用此构造函数

c# - 如何在 Web API Controller 中使用分层架构处理服务器错误

nhibernate - DDD : Primary keys (Ids) and ORMs (for example, (NHibernate)

c++ - 通过 operator new 定义简单对象工厂的正确语法

javascript - AngularJs 上的 Controller

c# - 用户控件的工厂模式

entity-framework - 我们可以将现有实体用于 Entity Framework 而不是 EF 生成的实体吗

domain-driven-design - 如何在微服务中跨服务执行验证

domain-driven-design - 聚合根中子实体的目的是什么?

constructor - 如何使用工厂构造函数在 Dart 中实现单例模式?