C# · 12月 28, 2021

c# – 我应该在DDD中进行独特的检查?

我正在开发我的第一个DDD项目,我认为我了解实体,数据访问对象及其关系的基本角色.我有一个基本的验证实现,将每个验证规则与其关联实体存储.这适用于仅适用于当前实体的规则,但在需要其他数据时会分解.例如,如果我有一个限制,一个用户名必须是唯一的,我希望IsValid()调用返回false当有一个现有的用户当前的名称.

但是,我没有找到任何干净的方式来保持该实体本身的验证规则.我想在实体上有一个IsNameUnique函数,但大多数解决方案要求我注入一个用户数据访问对象.这个逻辑应该在外部服务中吗?如果是这样,我还如何保持实体本身的逻辑?还是这个应该在用户实体之外的东西?

谢谢!

解决方法 在DDD中,有一个名为 aggregate的概念.它基本上负责应用程序中的一致性.

IMHO,在这种情况下,具体来说,我猜CustomerRepository会像“客户聚合”一样,是Customer类的聚合根.

然后,root将负责完成所有这些操作,没有其他人可以访问CustomerRepository选项.还有一些可能性:

>如果名称不唯一,则CustomerRepository可能会引发异常(并且客户将捕获并返回错误或类似的错误)> CustomerRepository可能有一个IsValidUserName(),客户在执行任何其他操作之前将调用它>你可以想到的任何其他选项