我困在一个我找不到解决办法的地方!这里有很多验证问题,但据我所见,大多数问题都是关于实体验证的。但是请求验证呢?
我正在为web应用程序开发一个服务。基本上我有三个模块,它们是Web、Domain。对Web项目的请求依赖于其他技术(JAX自动生成的类),它们不适合在域中使用。因此,我将它们转换为新的请求类,以使其更适合域服务。我还向新的请求类添加了默认值()和validate()方法。因此,请求验证的某些部分是在validate()方法中处理的。在域服务中,我在对应方法的第一行调用它们。因此,在开始操作之前,我知道请求是否有效。后来,我有了一些验证代码。在这一点上,我不太确定验证的哪一部分真正属于请求验证,哪一部分属于域服务作为业务逻辑。我相信每一段代码都属于它必须存在的地方!但有时很难做出决定:例如,在验证时需要使用存储库。让我举个例子来解释。
假设您需要实现一个可以从帐户中添加或删除客户的方法。除了null控件(验证-第1阶段)之外,您还可以检查客户是否有效。你需要储存库。然后,你检查任何一个帐户是否开立。你需要储存库。轰隆隆!然后检查请求中的客户是否已经被添加,或者尝试删除不属于帐户的客户,等等……您可能认为这些情况不是验证,而是业务逻辑。我认为他们是验证,因为首先,你检查客户和帐户,然后做其他事情。您认为如何使用验证方法中的存储库,您的验证优势是什么?你认为我提到的上述情况是有效的吗?提前谢谢。
发布于 2016-01-15 23:34:23
验证规则是业务逻辑。
即使是一个简单的"NULL“检查也是一条业务规则--有人认为忽略”中间名称“是可以的,但是必须始终填写"County”。
大多数验证规则并不是那么简单,甚至可能需要获得外部服务,例如“信贷机构s**t名单上的那个家伙”。
因此,不要把验证作为单独的步骤,它们甚至不是“特殊”的业务规则,在任何处理外部输入的应用程序中,大多数业务规则都是某种验证。
话虽如此,验证分为两大类:-
“请求是否格式良好”--是数字、必须填写的字段等--这些检查可以预先完成(通常是在请求者web浏览器中),并且不需要访问任何外部数据。
“内容有效吗?”--这几乎总是需要访问其他数据。
真正的问题是将验证的子集“检查请求是否格式良好”与整个验证混淆。
发布于 2016-01-15 22:21:02
首先,如果您有一个帐户聚合和一个客户聚合,以及通过添加一个客户来修改一个帐户的业务规则需要查看客户状态和帐户状态,那么您的业务规则或模型都是错误的。聚合边界包括强制执行业务不变所需的所有状态。
所有业务规则验证都属于拥有所检查状态的聚合中。
所有关于这个命令的参数的验证--这真的是一个客户吗,这个数字真的在1到100之间,等等--这个逻辑属于聚合之外。它是命令处理程序完成的命令验证的一部分(尽管具有相同的验证逻辑通常可用是有用的--客户端应该能够在将命令发送到命令处理程序以传递到聚合之前验证命令)。
https://softwareengineering.stackexchange.com/questions/287798
复制相似问题