Страницы

Поиск по вопросам

суббота, 15 февраля 2020 г.

Необходимость валидации сущностей, извлеченных из базы данных

#c_sharp #валидация #entity #ddd


Всем доброго времени суток)
Разрабатываю систему с использованием DDD.

В системе есть 2 модуля:


Модуль конфигурации. Он занимается регистрацией новых устройств: само устройство,
его модель и прочие параметры.
Модуль проверки устройства на дефекты.





Каждый тип устройства описывает конкретный класс-сущность (entity). При этом при
создании объекта класса-сущности необходимо производить валидацию его параметров. Регистрация
нового устройства в системе заканчивается его сохранением в базе данных с использованием
соответствующего репозитория (repository).
В модуле проверки выбранное из списка устройство загружается в программу из базы
данных. При помощи соответствующего репозитория на основе идентификатора возвращается
устройство для проверки на неисправности. На выходе репозитория в диагностику загружается
соответствующий объект класса-сущности устройства. Однако для создания такого объекта
необходимо проводить его валидацию. 


Возникает вопрос: насколько необходимо проводить валидацию извлеченной из базы данных
информации, если изначально в базу данных записывается верная информации о сущности?
Сама валидация осуществляется классом-валидатором, встраивающимся в соответствующий
объект-сущность устройства.

Может быть я что-либо совсем не так понимаю?
    


Ответы

Ответ 1



В базе нужно хранить уже достоверную и правильную информацию, чтобы сохранялась целостность данных. То есть что ты именно будешь верифицировать при извлечении из бд, я не понимаю. Проверять данные на корректность, нужно обязательно (!!) перед сохранением в БД.

Ответ 2



Я полностью согласен с @ImZ в том что при восстановлении из БД сущности валидировать не надо. Однако, проверять надо не перед сохранением в БД, а при попытке изменить сущность. Т.е. более правильно, когда нельзя привести сущность в невалидное состояние передав неправильное значение. Для этого сущность должна проводить проверку на корректность значений задаваемых через публичный интерфейс. Все это приводит к двум выводам: Сущность сохраняемая в БД априори валидна и повторная валидация не требуется. Если используется не тупой объект с сеттерами и геттерами, то вполне ожидаемо, что часть полей представляющих состояние объекта не будет представлено в публичном интерфейсе. И чтобы не идти на нарушение инкапсуляции добавляя геттеры и сеттеры, необходимы механизмы инициализации объекта минуя публичный интерфейс. Т.о. задача сохранения и восстановления в/из БД это чтение и последующая запись некоторого приватного состояния в объект.

Комментариев нет:

Отправить комментарий