Один із способів - це спроектувати свої моделі перед тим, як розробити базу даних. При розробці ваших моделей основна увага приділяється захопленню ділової логіки та значень у межах проблемної області. Це слід враховувати таким чином, який має сенс для бізнесу, включаючи більше, ніж просто сутності та поля даних. Деякі елементи даних інтерпретуються від інших, деякі залежать від інших тощо. Крім того, ви додасте до цієї моделі будь-яку необхідну вам базову логіку, наприклад, як об'єкт реагує внутрішньо, коли для певного елемента встановлено певне значення.
Цілком ймовірно, що ви виявите щось, що на 90% ідентично тому, як ви зберігаєте дані. Це добре. Він може бути повністю ідентичним, не з'єднуючись.
Зауважимо також, що моделювання домену в тумані справжнього постійного невігластва - це трохи святий граал для розробки програмного забезпечення. Якщо ви можете це зробити, фантастично. Але якщо проблемний домен взагалі суттєвий і має до нього складність, то все-таки хороша ідея час від часу відступати від моделювання домену, щоб зробити перевірку надійності збереження даних, щоб переконатися, що ви не фарбували себе в куток.
Просто запам’ятайте фактичні ролі різних компонентів і тримайте ці ролі розділеними під час їх проектування. Для будь-якого дизайнерського рішення запитайте себе, чи порушена якась із цих ролей:
- База даних - зберігати дані, підтримувати цілісність даних, підтримувати дані в спокої.
- Моделі - містять бізнес-логіку, моделюють проблемну область, підтримують дані в русі, реагують на події на рівні бізнесу тощо.
- Перегляди - представити дані користувачам, виконувати логіку на основі користувача (основна перевірка до того, як справжня перевірка буде виконана в моделях тощо).
- Контролери - реагувати на події користувача, передавати контроль моделям, запити маршруту та відповіді на повернення.