在域模型上的 DDD 设置器的上下文中是代码异味。应该避免使用它们,原因很简单,因为它们实际上并不是域的一部分。其中没有领域专家可以理解的名词,而对数据的更改应该通过特定的方法。
例子:
customer.StreetName = ...
customer.City = ...
虽然这样做的正确方法是拥有一种customer.ChangeAddress
可以发布事件等的方法。至少根据我的理解,这都是合理的理论,我完全可以理解为什么领域模型中的设置器并不是真正可取的。
但是:如果您的域模型上没有设置器,这些方法很难测试。
如果我不能构造一个没有接受所有参数的大屁股构造函数或做一些反射魔法的客户实例,我如何让一个客户实例运行我的测试?我在后端使用 NHibernate,所以 NHibernate 已经做了一些反射魔法来填充这些字段。
但是拥有一个有 10 个参数的 ctor 感觉真的很糟糕。(对于工厂方法也是如此)。
对此有何建议?
问候丹尼尔