Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

.NET Validation

501  
alex445 старожил25.11.21 13:28
25.11.21 13:28 
Последний раз изменено 25.11.21 13:29 (alex445)

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


Тогда делаем сначала ORM, в ней можно прописать валидацию - где-то имеем класс с валидирующими значениями для моделей в виде констант. Эти значения толкаем в атрибуты валидации в ORM и в классы моделей. Проблема - снова двойная валидация. И хотя уже руками два раза не прописываем, но всё равно она сработает два раза - на уровне модели и на уровне БД (ещё может на уровне ORM, но тут я не знаю, точно).


Это вообще нормально, что у нас чуть ли не в каждом слое своя валидация? Как-то неконсистентно выглядит. По идее, должна быть одна на всех. Поэтому завести где-то статику с константами для валидации - видится неплохой идеей. Константы можно и без заморочек прямо в конструкторы валидирующих атрибутов пихать.


Какие плюсы-минусы вы видите? Какие проблемы могут возникнуть во втором подходе?

#1 
alex445 старожил25.11.21 17:54
NEW 25.11.21 17:54 
в ответ alex445 25.11.21 13:28

Например, здесь человек спрашивает, в каком слое лучше валидировать

c# - Where is the best place in an app to do validation? Rules of thumb? - Stack Overflow

Ему отвечают - что во всех слоях лучше. Это понятно. Но я про другое спросил - как лучше организовать хранение валидирующих значений, если во всех слоях они одинаковые? Константы публичных статических классов?


И ещё, если базу данных делать в редакторе баз данных, то обычно валидационные значения (типа максимальной длины строки, диапазона значений для типов значений) ты вбиваешь руками. А я хочу, чтобы они брались из одного общедоступного хранилища во всех слоях, включая БД.

#2