Валидация данных - стандартный подход?
От: bnk СССР http://unmanagedvisio.com/
Дата: 24.12.15 18:16
Оценка:
Здравствуйте форумчане.

Разрабатываем систему на (ASP.NET)
В системе есть слой бизнес-логики, и каждый объект должен проходить некую проверку (валидацию).
причем многие проверки являются скорее перекрестными правилами.

"Если договор заключен до 30 июня, то в приложении к нему (связанный объект) должен присутствовать документ с маркером ABC"
"Если задание было выполнено подразделением X, то в поле Y должна быть подпись Карла и еще в пакете должен присутствовать договор с организацией Z на сумму не менее чем 100 рублей"

Не слишком наглядно, но принцип думаю понятен. Правил много (десятки-сотни).
Как обычно реализуется такая логика валидации?

Насколько я вижу, есть варианты

1. Писать код. Самый очевидный подход, но не очень гибкий.
При изменении правил код придется менять, деплоить-обновлять приложение, что есть рестарт/остановка сайтов/сервисов, что есть нехорошо.
Также для изменения кода нужны программисты, что также не слишком здорово.

2. Построить какой-то свой фреймворк для описания правил и переметризировать правила выше чтением неких конфиг-файлов.
Не нравится то что это задача-в-задаче, и вместо того, чтобы делать дело мы разрабатываем свой велосипед.

3. Использовать стандартный фремворк для валидации (какой посоветуете?)
Все что я видел (типа валидации ASP.NET MVC, Enterprise Library (EL) Validation Block, ну и всякие прочие валидации,
которые идут с библиотеками, как правило заточены на достаточно простой случай (типа длины строки или периода времени).
Это тоже нужно, но как быть с правилами вроде приведенных выше, не очень понятно. Например чтобы в той же EL (написанной архитектурными астронавтами походу)
описать что-то более-менее сложное-составное, это же серьезно обкуриться надо, да и это вряд ли поможет.

4. Использовать некий скриптовый язык, и иметь правила валидации на нем.
Например использовать как-то Roslyn в виде скрипта. Как это проще сделать и на чем?
Валидируемые сущности — это по сути обычные объекты. Они должны быть доступны из скрипта.

В общем, поделитесь опытом плиз. Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.