Одним из способов является разработка моделей до создания базы данных. При разработке ваших моделей основное внимание уделяется изучению бизнес-логики и значений в проблемной области. Это должно быть отражено таким образом, который имеет смысл для бизнеса, включая не только сущности и поля данных. Некоторые элементы данных интерпретируются от других, некоторые зависят от других и т. Д. Кроме того, вы добавили бы к этой модели любую базовую логику, которая вам нужна, например, как внутренний объект реагирует, когда для определенного элемента установлено определенное значение.
Вполне вероятно, что в конечном итоге вы получите что-то на 90 +% идентичное тому, как вы в конечном итоге сохраните данные. Хорошо. Это может быть полностью идентично, не будучи связанным.
Также обратите внимание, что моделирование домена в тумане истинного невежества является своего рода святым Граалем для разработки программного обеспечения. Если вы можете сделать это, фантастика. Но если проблемная область вообще значительна и имеет какую-то сложность, то все равно неплохо время от времени отступать от моделирования домена, чтобы проверять целостность данных, чтобы убедиться, что вы не нарисовали себя в угол.
Просто запомните реальные роли различных компонентов и разделяйте их при разработке. Для любого данного дизайнерского решения спросите себя, нарушена ли какая-либо из этих ролей:
- База данных - храните данные, сохраняйте целостность данных, сохраняйте данные в покое.
- Модели - содержат бизнес-логику, моделируют проблемную область, поддерживают движение данных, отвечают на события бизнес-уровня и т. Д.
- Представления - представление данных пользователям, выполнение пользовательской логики (базовая проверка перед выполнением истинной проверки в моделях и т. Д.).
- Контроллеры - отвечают на пользовательские события, передают управление моделям, направляют запросы и возвращают ответы.