Шаблон проектирования для проверки данных

23

Какой будет лучший шаблон проектирования для этой проблемы:

У меня есть Объект А. Объект А может быть зарегистрирован или удален из базы данных в зависимости от запроса пользователя.

Проверка данных выполняется перед регистрацией или удалением объекта. Существует ряд правил, которые необходимо проверить перед регистрацией объекта, и другой набор правил для удаления. Некоторые из этих правил являются общими для обеих операций.

Пока что я думаю, что шаблон проектирования « Цепочка ответственности» подходит больше всего, но у меня возникают проблемы с его реализацией.

melodui
источник
6
Как вы думаете, почему шаблон проектирования «Цепочка ответственности» подходит лучше всего?
Адам Цукерман

Ответы:

17

Обычно я использую отдельный класс валидатора для проверки каждого варианта использования. Например, перед добавлением продукта в базу данных я буду использовать AddProductValidator для проверки бизнес-правила, перед удалением продукта я буду использовать DeleteProductValidator для проверки и т. Д. Общее бизнес-правило может быть извлечено в спецификационный класс (шаблон спецификации) и совместно использовано классами валидатора.

Чтобы структурировать класс валидатора, я следую подходу здесь: http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/

Если вы используете .NET, я думаю, что вы можете рассмотреть Fluent Validation ( https://github.com/JeremySkinner/FluentValidation ). Я думаю, что это довольно круто и довольно близко к статье, которую я упоминал выше

Фуонг Нгуен
источник
1
новый URL-адрес проверки: github.com/JeremySkinner/FluentValidation
Brij
4

Как описано, я бы, вероятно, реализовал тип параметра . Таким образом, я мог бы вернуть «None» или проверенное значение (возможно, лениво), но это - деталь реализации и приятно приводит к идее использования Decorator .

Декоратор Pattern

Конечно, если интерфейс станет некрасивым, я бы использовал фасад .

Эллиот Фриш
источник
Декоратор будет работать, но я обычно думаю о шаблоне Декоратор как о чем-то, что нужно использовать, когда вы хотите преобразовать выходные данные во входные для другого класса. В этом случае вы просто будете проверять. Я думаю, что цепь ответственности может работать лучше, имхо.
Нил