#c_sharp #валидация #entity #ddd
Всем доброго времени суток) Разрабатываю систему с использованием DDD. В системе есть 2 модуля: Модуль конфигурации. Он занимается регистрацией новых устройств: само устройство, его модель и прочие параметры. Модуль проверки устройства на дефекты. Каждый тип устройства описывает конкретный класс-сущность (entity). При этом при создании объекта класса-сущности необходимо производить валидацию его параметров. Регистрация нового устройства в системе заканчивается его сохранением в базе данных с использованием соответствующего репозитория (repository). В модуле проверки выбранное из списка устройство загружается в программу из базы данных. При помощи соответствующего репозитория на основе идентификатора возвращается устройство для проверки на неисправности. На выходе репозитория в диагностику загружается соответствующий объект класса-сущности устройства. Однако для создания такого объекта необходимо проводить его валидацию. Возникает вопрос: насколько необходимо проводить валидацию извлеченной из базы данных информации, если изначально в базу данных записывается верная информации о сущности? Сама валидация осуществляется классом-валидатором, встраивающимся в соответствующий объект-сущность устройства. Может быть я что-либо совсем не так понимаю?
Ответы
Ответ 1
В базе нужно хранить уже достоверную и правильную информацию, чтобы сохранялась целостность данных. То есть что ты именно будешь верифицировать при извлечении из бд, я не понимаю. Проверять данные на корректность, нужно обязательно (!!) перед сохранением в БД.Ответ 2
Я полностью согласен с @ImZ в том что при восстановлении из БД сущности валидировать не надо. Однако, проверять надо не перед сохранением в БД, а при попытке изменить сущность. Т.е. более правильно, когда нельзя привести сущность в невалидное состояние передав неправильное значение. Для этого сущность должна проводить проверку на корректность значений задаваемых через публичный интерфейс. Все это приводит к двум выводам: Сущность сохраняемая в БД априори валидна и повторная валидация не требуется. Если используется не тупой объект с сеттерами и геттерами, то вполне ожидаемо, что часть полей представляющих состояние объекта не будет представлено в публичном интерфейсе. И чтобы не идти на нарушение инкапсуляции добавляя геттеры и сеттеры, необходимы механизмы инициализации объекта минуя публичный интерфейс. Т.о. задача сохранения и восстановления в/из БД это чтение и последующая запись некоторого приватного состояния в объект.
Комментариев нет:
Отправить комментарий