Чи можуть доменні моделі в базі даних бути стійким рішенням?


13

Я щойно розпочав нову роботу як розробник баз даних для компанії середнього та невеликого розміру, заснованої на технології Microsoft. Я рано помітив, наскільки практика відхиляється від того, що мене навчали в школі щодо найкращих практик, моделей дизайну, тестування та управління проектами.

Що мене найбільше клопоче - це те, як наш головний розробник баз даних (відтепер називається "Джон") зберігає модельну схему в базі даних! Ми робимо це, маючи 3 «чарівні» таблиці; одна для баз даних-схем, одна для таблиць і одна для стовпців.

Вставлення запису в таблицю " Таблиці " генерує (через тригер бази даних) фактичну відповідну таблицю. Вставлення рядка в таблицю " Рядки " оновлює таблицю з посиланням на цей рядок. Вони, у свою чергу, читаються його саморобною програмою C # для створення моделей C #, які використовуються розробниками інтерфейсів для контролерів і зовні.

Крім цього, більшість розробок проводиться згідно з рамками ASP.NET MVC .

Я бачу кілька недоліків у такому підході:

  • Нам він потрібен для підтримки ОРМ, і він рідко встигає зробити це (безпека роботи хороша!)
  • Тригери для таблиці "Таблиці" та "Рядки" є помилковими. Вони не підтримують оновлення таблиць, а також перевірки обмежень або більше "розширених" функцій. Хоча ми, безумовно, могли їх покращити, я ще не впевнений, чи це шлях.
  • Утримання програмної логіки в базі даних відчуває себе дивно та обмежувально (хоча можливо розширити його моделі через C #).
  • Його C # Модель-генератор повинен запускати вручну один з 3-х людей (серед яких я - один), і він ще недостатньо зрілий, щоб бути включеним в автоматизований процес збирання.

Кілька людей запропонували поетапно реалізувати справжній і перевірений продукт, такий як Entity Framework , але він відхиляє його, заявивши, що збереження ділової логіки в кодовому рівні підходить лише для невеликих програм та завантажувальних проектів для стартапів.

Ця публікація веде до чогось, що могло б виглядати як впевнене обговорення, але це не мій намір. Я просто хочу роз’яснення стосовно нашого архітектурного підходу.

Чи може зберігання доменних моделей у базі даних бути стійким рішенням для компанії, що росте?


Доменні моделі дуже тісно пов'язані з дизайном, керованим доменом. Вся суть дизайну, керованого доменом, повинна бути вільною від дизайну, керованого даними, де дані (тобто база даних) є ядром програми. Згаданий підхід і доменні моделі насправді не йдуть разом. Розробляючись дотримуючись методів дизайну, керованого доменом, вам не важливо, звідки беруться дані, ви просто використовуєте їх і виконуєте логіку щодо них у вашому бізнес-рівні.
Енді

Мені трохи незрозуміло, що ви маєте на увазі під "зберіганням програмної логіки в базі даних". Чи можете ви уточнити це?
Роберт Харві

Логіка бізнесу в коді - це абсолютно правильний шлях. ДБ має бути німим сховищем даних, нічого іншого.
Енді

@Andy я думаю, це залежить. Можливо, їхня DBA - це центр команди, і він зберігає всю логіку ділових процесів у базі даних, яка потім запитується за допомогою німих збережених викликів протоколу, витягує дані в POCO тощо. Це сумнівний підхід, але я знаю команди, зберігаючи більшість ділової логіки якщо не все це в БД.
Владислав Раструсний

@VladislavRastrusny Незалежно від причини, збереження ділової логіки в db - це надзвичайно погана конструкція.
Енді

Відповіді:


16

Ви описуєте внутрішню платформу.

Проблема внутрішніх платформ полягає в тому, що ви винаходите всі механізми платформи чи технології (в даному випадку реляційну базу даних), які були відточені та вдосконалені протягом десятиліть еволюції та зусиль, але відновлювали їх погано. Ви обминаєте всі оптимізації, доступні для тих, хто обирає більш звичайний дизайн, і торгуєте початковою простотою та вишуканістю для майбутньої складності та труднощів.

Однак, якщо кінцевим продуктом цього процесу є реальні таблиці та реальні класи, що моделюють реальні об'єкти бізнес-домену, я не бачу великої шкоди в цьому підході, крім незрілості інструментів. Stack Exchange фактично використовує свій власний, доморощений ORM, і це, здається, спрацювало для них. Тож я знаю, що такі види "котеджних" підходів можуть працювати.

Зауважте, що більшість ОРМ, які використовують підхід «на першому столі», просто дивляться на структуру таблиці в базі даних для створення класів. Таблиці "таблиця" та "рядок", створені вашим другом, - це лише метадані, які вже існують у системних таблицях більшості сучасних систем реляційних баз даних.

Подальше читання
проекту "Бачення", застережливої ​​розповіді про ефект внутрішньої платформи
(Ви можете пропустити преамбулу і почати читати в підзаголовку "Представлення бачення")


2
Цікаво читати, я точно міг би намалювати анології. Я все ще новий і поки що буду залишатися глядачем, але обов'язково триматиму його під об’єктивом. Дякуємо за гарну відповідь!
krystah
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.