Це підводний зразок DDD?
Дозвольте спочатку вияснити кілька помилок.
DDD не є зразком. І це насправді не призначає шаблонів.
У передмові до книги про DDD Еріка Евана зазначено:
Провідні розробники програмного забезпечення визнали моделювання домену та дизайн домен як найважливіші теми протягом принаймні 20 років, але напрочуд мало написано про те, що потрібно зробити або як це зробити. Хоча вона ніколи не була сформульована чітко, філософія виникла як недолік у спільноті об'єктів, філософію, яку я називаю дизайном, керованим доменом.
[...]
Особливістю, спільною для успіхів, була багата доменна модель, яка розвивалася за допомогою ітерацій дизайну і стала частиною тканини проекту.
Ця книга надає основу для прийняття дизайнерських рішень та технічний словник для обговорення дизайну доменів. Це синтез загальноприйнятих найкращих практик, а також мої власні уявлення та досвід.
Отже, це спосіб наблизитись до розробки програмного забезпечення та моделювання доменів, а також до деякої технічної лексики, яка підтримує ці дії (словниковий запас, що включає різні поняття та закономірності). Це також не щось абсолютно нове.
Інша річ, яку слід пам’ятати, - це те, що доменна модель - це не її реалізація OO, яку можна знайти у вашій системі - це лише один із способів її виразити або висловити якусь частину. Модель домену - це те, як ви думаєте про проблему, яку ви намагаєтеся вирішити за допомогою програмного забезпечення. Це те, як ти розумієш і сприймаєш речі, як ти говориш про них. Це концептуально . Але не в якомусь невиразному сенсі. Він глибокий і вишуканий, і є результатом наполегливої праці та збору знань. Він доопрацьовується і, ймовірно, розвивається з часом, і він передбачає міркування щодо впровадження (деякі з яких можуть стримувати модель). Її слід поділити всім членам команди (та залучені експерти домену), і він повинен визначати, як ви реалізуєте систему, щоб система уважно відображала її.
Нічого про це не властиво про- або анти-SQL, хоча розробники ОО, як правило, краще виражають модель на мовах ОО, і вираз багатьох доменних концепцій краще підтримується OOP. Але іноді частини моделі повинні виражатися в іншій парадигмі.
Мене цікавить, що відбувається, коли у мене дуже складні запити [...]?
Ну, загалом, тут є два сценарії.
У першому випадку деякий аспект домену дійсно вимагає складного запиту, і, можливо, цей аспект найкраще виражений у парадигмі SQL / реляції - тому використовуйте відповідний інструмент для роботи. Відобразить ці аспекти у вашому доменному мисленні та мові, що використовується при спілкуванні понять. Якщо домен складний, можливо, це частина піддомену з власним обмеженим контекстом.
Інший сценарій полягає в тому, що сприйнята потреба висловити щось у SQL є результатом обмеженого мислення. Якщо людина або колектив завжди орієнтувались на базу даних у своєму мисленні, їм може бути важко, лише через інерцію, побачити інший спосіб підходу до речей. Це стає проблемою, коли старий спосіб не відповідає новим потребам і вимагає певного продумування. DDD, як підхід до проектування, частково стосується способів пошуку виходу з цього поля, збираючи та переганяючи знання про домен. Але всі, здається, ігнорують цю частину книги і зосереджуються на деяких перерахованих технічних словниках та зразках.