Вашим керівним принципом має бути Не Повторюйте себе :
В інженерії програмного забезпечення "Не повторюйте себе" (DRY) - це принцип розробки програмного забезпечення, спрямований на зменшення повторення інформації будь-якого типу, особливо корисного в багаторівневій архітектурі. Принцип DRY вказаний як "Кожен предмет повинен мати єдине, однозначне, авторитетне представлення в системі".
ORM по суті є додатковим шаром (або рівнем, якщо вам зручніше), зручно сидіти між вашою програмою та вашим сховищем даних. Ваші обмеження повинні бути в одному місці, і лише на одному місці, будь то ORM або сховище даних, інакше досить скоро ви закінчите підтримувати різні їх версії. Ти справді не хочеш цього робити.
Однак на практиці більшість напівпристойних ОРМ автоматично генерують велику кількість ваших моделей із вашої схеми даних. Незважаючи на те, що все ще існує дублювання, шанси на пекельне обслуговування мінімальні, оскільки дублюючий код ORM генерується за тією ж схемою щоразу. Ідеально було б не мати дублікату коду, але автоматично створені обмеження - це найкраща справа.
Крім того, наявність обмежень в одному місці не обов'язково означає, що ви повинні мати всі свої обмеження в одному місці. Деякі, як референтні обмеження цілісності, можуть бути більш придатними для зберігання даних (але можуть бути втрачені, якщо ви перейдете до іншого сховища даних), а деякі, в основному ті, що стосуються складної бізнес-логіки, більше підходять для вашої ORM. Краще, щоб усі ваші яблука були в одному кошику, але…
Невдачі
Ви згадуєте про помилку ORM. Це абсолютно не має значення для вашого питання. Ваша програма повинна розглядати ORM та сховище даних як єдину сутність. Якщо він не вдається, він не вдався, обходячи ORM безпосередньо для спілкування зі сховищем даних, не є хорошою ідеєю.
Обхід ORM для чого-небудь іншого
Також не гарна ідея. Однак це може статися з різних причин:
Спадкові частини програми, створені до введення ORM.
Це жорстка один, і саме в такій ситуації я маю справу з прямо зараз , тому моїм постійним повтором «підтримуючої пекло». Або ви продовжуєте підтримувати неручні частини ORM, або переписуєте їх для використання ORM. Другий варіант може мати більше сенсу спочатку, але це рішення, яке базується виключно на тому, що саме роблять ті частини вашої програми та наскільки цінним буде повне перезапис у довгостроковій перспективі.
Спробуйте змінити ключ у погано розробленій таблиці MySQL 2 * 10 ^ 8 рядків (без простоїв), і ви зрозумієте, звідки я родом.
Не застарілі частини програми, яким абсолютно потрібно безпосередньо спілкуватися зі сховищем даних:
Ще хитріше. ORM - це вигадливі інструменти, і вони піклуються про майже все, але іноді вони просто заважають або навіть є абсолютно марними. Слово (насправді buzzphrase) - невідповідність об'єктно-реляційного імпедансу , просто кажучи, що ORM технічно не може робити все, що робить ваша реляційна база даних, а для деяких речей, які вони роблять, існує суттєвий штраф за продуктивність.
Коментарі
З точки зору цілісності даних обмеження ОБОВ'ЯЗКОВО бути на базі даних, а ОБОВ'ЯЗКОВО бути на додатку. Що робити, якщо доступ до вашої програми через Інтернет та настільні програми, або мобільний додаток, або веб-сервіс? - Луїз Дамім
Тут додавання додаткового шару було б надзвичайно корисним, і якщо ми говоримо про веб-додаток, я б запустив API REST. Надмірно спрощений дизайн для цього було б:
ORM буде розташовуватися між API та сховищами даних, і все, що стоїть за API (включаючи його), вважатиметься єдиним об'єктом з різних програм.