我应该在哪里进行DDD的独特检查?

Sha*_*mer 13 c# entity domain-driven-design repository

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

但是,我没有找到任何干净的方法来保持实体本身的验证规则.我想在实体上有一个IsNameUnique函数,但是执行此操作的大多数解决方案都需要我注入用户数据访问对象.这个逻辑应该在外部服务吗?如果是这样,我如何仍然保持与实体本身的逻辑?或者这是应该在用户实体之外的东西?

谢谢!

Sam*_*ijo 2

在DDD中,有一个概念叫做聚合。它基本上负责应用程序内的一致性。

恕我直言,在这种情况下,我猜 CustomerRepository 将位于类似“客户聚合”之类的内容中,作为客户类的聚合根。

然后,根用户将负责执行所有这些操作,并且其他任何人都无法访问 CustomerRepository 选项。还有一些可能性:

  • 如果名称不唯一,CustomerRepository 可能会抛出异常(并且 Customer 会捕获并返回错误或类似的错误)
  • CustomerRepository 可以有一个 IsValidUserName(),客户在执行其他操作之前会调用它
  • 您能想到的任何其他选择