Восстановление объектов значений из базы данных

Восстановление объектов значений из базы данных
Восстановление объектов значений из базы данных - wildlittlethingsphoto @ Unsplash

Я использую Domain-Driven Design с Railway-ориентированным программированием в качестве метода обработки исключений.

Каждый объект значения не будет бросать Error, но будет возвращать Result тип, указывающий на неудачу или успех.

Вот мой процесс:

  1. Срабатывание команды
  2. Загрузка данных из базы данных в домен
  3. Изменения в процессе
  4. Сохранение данных домена в базе данных

Я застрял на шаге 2, загрузка данных из базы данных в домен. Данные, которые загружаются из базы данных, будут передаваться в домен как объекты значений, которые в настоящее время имеют валидацию.

Я понял, что проверять данные, которые я получаю из базы данных, довольно глупо, потому что если мы изменим правила в объекте значения, старые данные могут стать недействительными и никогда не обновиться. Другими словами, я потеряю данные после изменения кода.

Я хотел бы знать, следует ли мне проверять данные, которые я получаю из базы данных, или создать reconstitute метод/функцию, которая просто использует данные для создания объектов значений без их проверки?

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

Поскольку вы говорили об «изменении правил», позвольте мне сосредоточиться на проверке на стороне приложения, а не на ограничениях базы данных. В большинстве систем, использующих базу данных, будет различие между

  1. Загрузка и сохранение некоторых данных из БД.

  2. Использование или обработка данных в определенных случаях использования или этапах обработки, либо интерактивно, либо автоматически, либо и то, и другое.

Проверка на стороне приложения (или проверка объекта домена) не должна смешиваться с #1 и не запутываться с ней, иначе у вас не будет возможности реализовать такие процессы, как

  • интерактивное редактирование данных (с промежуточными, недопустимыми состояниями)
  • исправление данных (например, после изменения бизнес-правила, делающего некоторые объекты недействительными)
  • обеспечение качества (где вы хотите отображать данные в недопустимом состоянии)

Следовательно, будьте осторожны, какую проверку вы применяете во время создания объектов домена и какие правила проверки вы предоставляете в виде отдельных методов, которые могут быть вызваны позднее. Слишком строгая проверка во время создания не позволит реализовать определенные варианты использования.

Однако в некоторых случаях использования могут потребоваться более строго проверенные входные данные или строгая проверка выходных данных перед их дальнейшей обработкой.

Вот и надо смотреть:

  • выяснить, в каком варианте использования должны применяться какие бизнес-правила и когда

  • реализовать правила проверки для них и вызывать их в соответствующих местах (что не обязательно после загрузки данных из БД, но, возможно, в более поздний момент времени)

Конечно, если ваша система не поддерживает какие-либо варианты использования, которые позволяют исправлять или обеспечивать качество содержимого объектов предметной области, вы можете выполнять проверку также во время создания.

Вкратце: решение о том, какие правила проверки применять сразу же после загрузки объекта из базы данных, сильно зависит от вариантов использования вашей системы, и это не решение типа «все или ничего».


LetsCodeIt, 18 декабря 2022 г., 04:15