【发布时间】:2020-04-14 03:28:38
【问题描述】:
我是域驱动设计的新手,在编写域模型时有一件事情困扰着我。如何处理域验证?
我正在设计图书馆管理系统,用户可以在其中搜索书籍并查看书籍是否在库存中。 如果不是,用户可以创建图书请求,以便创建某种队列。规则是我们没有任何书存货。现在我有关于书籍实体内部数量的信息,这不是问题,但是如果我有不同的有界上下文来请求书籍和书籍目录怎么办。然后我必须以某种方式联系另一个垂直/服务并在创建书籍聚合之前询问(验证)书籍数量是否为零。
我也在检查用户是否有有效的会员卡,他是否已经借过书,用户是否有任何书籍的主动请求。
困扰我的事情。
由于验证,在将其传递给域模型之前,我需要知道究竟要包含什么。我不确定这是最安全的方法,因为我的验证准确性将取决于规范/查询等。
另一件非常重要的事情。当应用程序层方法开始执行并且某些内容无效时,客户端将仅获得已执行代码的验证消息,并且很有可能有更多的事情阻止代码执行。如果用户正在填写一些表格,这可能真的很不方便。
解决此问题的初步想法。
我有命令/处理程序架构,并且我正在使用 MediatR,所以我正在考虑在命令和处理程序之间移动域验证,这将解决我现在的问题,但这种方法将跨有界上下文传播域知识,域模型不会足够聪明,可以防止无效的动作。更准确地说,我需要在执行应用程序方法(处理程序)之前考虑我需要验证的内容。
所以我真的很好奇。是否有任何明确的方法可以在域模型中处理域验证?
【问题讨论】:
标签: validation domain-driven-design domain-model rich-domain-model