我有一个年龄值对象它验证年龄在2 const (MinimumAge和MaximumAge)之间
在某些时候,我希望能够动态地改变这个最小和最大范围项目发布后无需编辑代码(例如从DB读取或从其他地方获取…)
如何在不违反DDD规则和忠于值对象自验证的情况下做到这一点?
我尝试了几种方法,但都违反了DDD规则
我的建议是不要将可更改的值视为不变量。
如果你有不同但不变的年龄范围,那么你可能有多个抽象在接口后面的Age
值对象,并且使用该值对象的对象有一些AgeType
的指示符。例如,您可能有一个验证年龄在2-16岁之间的RegistrationAge
和另一个验证年龄在18-任何年龄段的VotingAge
。然而,如果年龄可能改变,那么它们真的不应该硬编码为值对象中的不变量。相反,它们可以作为参数提供给值对象,这些参数可以在域外定义(例如,数据库或其他一些设置)。
这可能是你所追求的Specification
,或者你的Age
值对象可以作为一个规范。