在 NerdDinner 教程的 Step 5中,在Complete Edit Action Method Implementations下的中间有一段:
我们的 Edit 实现的好处是,我们的 Controller 类和 View 模板都不需要知道关于晚餐模型强制执行的特定验证或业务规则的任何信息。我们可以在未来向我们的模型添加额外的规则,并且不必为了支持它们而对我们的控制器或视图进行任何代码更改。这使我们能够灵活地在未来通过最少的代码更改轻松地发展我们的应用程序需求。
我的问题是可以添加什么样的规则,并且以这样一种方式,我不会失去我的干净分离。我可以看到这段代码:
public static class ControllerHelpers {
public static void AddRuleViolations(this ModelStateDictionary modelState, IEnumerable<RuleViolation> errors) {
foreach (RuleViolation issue in errors) {
modelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
}
}
比这段代码更好:
catch {
foreach (var issue in dinner.GetRuleViolations()) {
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return View(dinner);
}
因为我没有特定的类/模型信息并且可以在整个应用程序中使用它。而且,如果我的错误处理像上面这样简单,我可以看到这有多好,但是我看不到如何为新的业务规则添加更复杂的东西,并希望有一个例子。