Validation 如何在域层进行验证
我经常看到人们通过创建规则对象来验证域对象,规则对象接受委托来执行验证。例如这个例子: 我不明白的是,仅仅说做一个方法有什么好处 例如,在那篇特定的文章中,有一个方法创建委托来检查字符串是否为空 但这不就是简单地拥有这样的东西吗:Validation 如何在域层进行验证,validation,dns,Validation,Dns,我经常看到人们通过创建规则对象来验证域对象,规则对象接受委托来执行验证。例如这个例子: 我不明白的是,仅仅说做一个方法有什么好处 例如,在那篇特定的文章中,有一个方法创建委托来检查字符串是否为空 但这不就是简单地拥有这样的东西吗: Bool validate() { Result = string.IsNullOrEmpty(name); } 当这些规则是上下文敏感的并且可能不会被共享时,为什么要麻烦地创建一个对象来保存规则并在委托中定义规则呢?方法也可以做到这一点。有几个原因: SR
Bool validate()
{
Result = string.IsNullOrEmpty(name);
}
当这些规则是上下文敏感的并且可能不会被共享时,为什么要麻烦地创建一个对象来保存规则并在委托中定义规则呢?方法也可以做到这一点。有几个原因: SRP-单一责任原则。对象不应对其自身的验证负责,它有自己的责任和存在的理由 此外,当涉及到复杂的业务规则时,明确说明这些规则可以使验证代码更易于编写和理解 业务规则也往往会发生很大的变化,比其他域对象变化更大,因此将它们分开有助于隔离变化
您发布的示例太简单,无法从成熟的验证对象中获益,但如果系统变大,验证规则变得复杂,则非常方便。这里最明显的示例是一个Web应用程序:您填写表单并单击“提交”。您的一些数据出错。会发生什么
- 某个对象抛出异常。某个对象(可能更高级别)捕获异常并打印它(可能您只捕获UserInputValidExceptions,假设其他异常应该被记录下来)。您看到了第一个错误
- 您编写了一个validate()函数。它说“否”。您会向用户显示什么
- 您编写了一个validate()函数,该函数返回(或引发异常,或追加)消息列表。您可以显示消息……但按字段分组,或将其显示在错误的字段旁边,不是很好吗?是否使用元组列表或列表元组?您希望规则占用多少行