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