|
|
1
1
存储库通常比它们获取/存储的域对象处于更高的抽象级别。如果您发现您的域对象依赖于存储库,那么它是上游设计问题的指示。
实际上,您拥有的是循环依赖关系。这个
我的建议是,不要将此作为
这个建议有第二个原因。这是并发性的原因。即使您验证用户名并发现它 不 已经存在,当你试图 节约 那个用户。因此,您需要处理异常情况(尝试插入已经存在的用户名) 无论如何 . 考虑到这一点,你最好把这件事推迟到最后一刻,因为你事先没有办法保证。 域对象应该 不 依赖关系;如果它们自验证,那么验证应该依赖于 只有 在被验证的实际对象上,而不是数据库中的其他数据上。重复的用户名约束实际上是一个数据约束,而不是域约束。
总结:
将此特定验证移出
|
|
|
2
1
只是补充一下奥罗诺特所说的。这种设计存在一个更大的问题,因为域模型验证应该只验证模型固有的属性,而不是在更大的系统的上下文中。这种内在属性的一些例子是对用户名长度、可接受字符、名字和姓氏都被归档等的要求。 您正在执行的验证是系统范围的验证,属于服务/存储库。如果使用域驱动设计进行设计,则此系统的外观如下:
|