【问题标题】:Can Aggregate Root Factory create the root, and it's internal classes?聚合根工厂可以创建根,它是内部类吗?
【发布时间】:2018-07-30 09:39:30
【问题描述】:

目前,我的聚合和值对象具有受保护的构造函数,并且几乎所有它们都是由聚合内的静态工厂方法创建的,具有描述性名称。它创建了一个很好的 DSL 和漂亮的封装模型但是让单元测试很痛苦(如果域模型创建失败,服务/命令处理程序也将被标记为失败) .另一方面,为每个实体和值对象引入工厂方法,迫使我将每个实体/值对象的工厂接口注入到服务中。

是否可以为每个聚合根创建一个工厂服务,每个实体/值对象都有一个工厂方法? 这是创建公司聚合根的工厂服务示例,它是内部实体/VO:

public class CompanyFactory : ICompanyAggregateRootFactory
{
    public Company CreateCompany(...){}
    public Employee CreateEmployee(...){}
    public CEO CreateCEO(...){}
    ....

}

有没有其他方法可以强制执行相同级别的封装和 DSL 清晰度,而不会使单元测试相互依赖?

【问题讨论】:

    标签: c# unit-testing domain-driven-design dsl aggregateroot


    【解决方案1】:

    蓝皮书有一章是关于工厂的。是的,为您的聚合根创建一个工厂是完全可以的。这个工厂的内部实现并不重要。您可以将其他工厂用于值对象或任何其他方式。 我有一个建议:我对您的域了解不多,但我认为员工应该是一个单独的集合。而且 CEO 实际上是一名员工,所以也许你应该重新考虑一下这个设计。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 2018-11-08
      • 2018-09-13
      • 2019-02-13
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多