【发布时间】: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