В руководстве NerdDinner, шаг 5 , посередине под Завершить редактирование реализаций метода действия есть абзац:
Приятной особенностью нашей реализации Edit является то, что ни наш класс Controller, ни наш шаблон View не должны ничего знать о конкретной проверке или бизнес-правилах, применяемых нашей моделью Dinner. Мы можем добавить дополнительные правила к нашей модели в будущем и не должны вносить какие-либо изменения в код нашего контроллера или представления для их поддержки. Это дает нам гибкость, позволяющую легко изменять требования наших приложений в будущем с минимальными изменениями кода.
Мой вопрос: какое правило можно добавить и таким образом, чтобы я не потерял свое чистое разделение. Я вижу этот код:
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);
}
потому что у меня нет конкретной информации о классе / модели, и я могу использовать ее в приложении. И я вижу, как это хорошо, если моя обработка ошибок проста, как описано выше, но я не понимаю, как бы я добавил что-то более сложное для новых бизнес-правил и надеялся на пример.