Шаблон дизайну для перевірки даних


23

Яка найкраща модель дизайну для цієї проблеми:

У мене є Об'єкт А. Об'єкт A може бути зареєстрований або видалений з бази даних залежно від запиту користувача.

Перевірка даних проводиться до реєстрації або видалення об'єкта. Існує набір правил, які потрібно перевірити, перш ніж об'єкт може бути зареєстрований, та інший набір правил для видалення. Деякі з цих правил є спільними для обох операцій.

Поки що я думаю, що модель дизайну ланцюга відповідальності найбільше підходить, але у мене виникають проблеми з її реалізацією.


6
Чому ви вважаєте, що модель дизайну ланцюга відповідальності найкраще підходить?
Адам Цукерман

Відповіді:


17

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

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

Якщо ви користуєтесь .NET, я думаю, ви можете розглянути можливість перевірки вільної здатності ( https://github.com/JeremySkinner/FluentValidation ). Я думаю, що це досить круто і досить близько до статті, про яку я згадував вище


1
нова URL-адреса валідації флюента
Brij

4

Як описано, я б, можливо, реалізував тип опції . Таким чином я міг би повернути значення "None" або підтверджене значення (можливо, ліниво), але це деталізація реалізації та добре приводить до ідеї використання декоратора .

Орнамент візерунок

Звичайно, якщо інтерфейс стає некрасивим, я б використовував фасад .


Decorator б спрацював, але я зазвичай вважаю шаблон «Decorator» як щось, що слід використовувати, коли ви хочете перетворити вихідний вхід для іншого класу. У цьому випадку ви просто отримаєте перевірку. Я думаю, що ланцюжок відповідальності може працювати краще.
Ніл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.