Триває набір нової групи на курс Enterprise Patterns! Старт курсу 02.12.2024. Реєструйтеся зі знижкою 30% до 31.10.2024!
Дізнатися більше
07.01.2024
9 хвилин читання

Підхід до проектування ПЗ DDD

Сьогодні ми розберемося з поняттям ddd що це і які в нього переваги та недоліки…

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

Його розробив Ерік Еванс на початку 2000-х років. Еванс був розчарований тим, що наявні підходи до проєктування ПЗ не враховують особливостей предметної області, і запропонував новий підхід, який фокусується на вивченні та моделюванні предметної області.

Метод швидко набув популярності і сьогодні його використовують у широкому спектрі проєктів, від невеликих веб-додатків до великих корпоративних систем.

DDD розробка фокусується на таких аспектах:

  • Усвідомлення предметної області: потрібне глибоке розуміння предметної області, у якій використовуватиметься система. Це допомагає розробникам створити систему, яка відповідає реальним потребам користувачів і бізнесу.
  • Моделювання предметної області: модель предметної області допомагає розробникам зрозуміти та задокументувати предметну область, а також реалізувати її в програмному коді.
  • Створення гнучкої системи: системи можуть адаптуватися до змін у предметній області.

Детальніше дізнатися про те, що таке бізнес-логіка, можна на каналі Сергія Немчинського, директора навчального центру FoxmindED Що таке “бізнес логіка”? І як почати її розуміти 

Основні принципи

Що таке domain driven design у контексті вивчення предметної області? Це не просто прочитання технічної документації; це залучення в бізнес і розуміння його внутрішніх процесів.

Дізнатися більше про проектування ПЗ ти можеш на наших курсах рівня middle/senior
Деталі:
Online формат
Доступ до закритих лекцій
Практичні завдання
Різні пакети участі
Обрати курс

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

Чому це важливо? Тому що, щоб створити ефективний і адаптивний код, необхідно чітко уявляти, з чим цей код буде взаємодіяти. Знання предметної області дає змогу створювати код, який не тільки виконує свої функції, а й реально відображає і підтримує бізнес-процеси.

Тепер перейдемо до стратегічного проєктування, де ключовими концепціями є піддомени та Bounded Contexts.

Піддомени – це логічний поділ бізнесу на окремі області. Кожен піддомен фокусується на конкретних бізнес-функціях або процесах. Наприклад, у банківському застосунку піддомени можуть включати “Керування рахунками” або “Видача кредитів”.

Bounded Contexts – це свого роду невидимі кордони навколо кожного піддомену. Вони визначають контекст використання термінів і концепцій у межах кожного піддомену, запобігаючи плутанині, що може виникнути, якщо терміни будуть використовуватися в різних сенсах у різних контекстах.

Таким чином, стратегічне проєктування в DDD – це процес, що визначає компоненти системи та їхні взаємозв’язки. Мета цього процесу – створити систему, яка буде гнучкою та адаптованою до змін у предметній області.

Ці принципи ddd слугують керівництвом під час розроблення ПЗ, даючи змогу створювати гнучкі, зрозумілі системи, що відповідають предметній області.

Domain-Driven Design

Основні компоненти

Підхід використовує такі основні компоненти:

  1. Елементи моделі предметної області
  • Сутності: це об’єкти, які існують у реальному світі. Вони мають унікальний ідентифікатор і можуть мати відносини з іншими сутностями.
  • Об’єкти-значення: дані, які не мають унікального ідентифікатора. Вони часто використовуються для зберігання інформації, яка не є критичною для бізнесу.
  • Агрегати: це групи пов’язаних сутностей і об’єктів-значень. Вони являють собою логічні одиниці, які можуть бути змінені тільки разом.
  1. Репозиторії: забезпечують доступ до даних у системі. Вони відповідають за зберігання, читання та оновлення даних.
  2. Сервіси: це функції, які виконують бізнес-логіку. Вони відповідають за обробку даних і виконання дій у системі.

Репозиторії та сервіси можуть бути реалізовані в різних технологіях, таких як бази даних, ORM-фреймворки або API.

Переваги та недоліки 

DDD пропонує низку переваг, включно з:

  • Гнучкість і адаптованість: допомагає створювати системи, які можуть адаптуватися до змін у предметній області. Це досягається за рахунок того, що відбувається акцент на вивченні предметної області та виділенні піддоменів і Bounded Contexts.
  • Поліпшене розуміння предметної області: розробники краще розуміють предметну область, завдяки її глибокому вивченню та використанню мови предметної області.
  • Більш ефективне спілкування: розробники та користувачі краще розуміють один одного. Це досягається завдяки використанню мови предметної області та моделювання предметної області в програмному коді.

Однак, DDD програмування може бути складним підходом для розуміння і застосування. І ось чому:

  • Вивчення предметної області: це складний і трудомісткий процес, що вимагає глибокого розуміння складних понять і взаємозв’язків.
  • Вимога глибокого розуміння предметної області: DDD вимагає від розробників глибокого занурення в предметну область. Це може бути важко для тих, хто не має достатньої експертизи в цій сфері.
  • Складнощі в реалізації: впровадження DDD вимагає правильного виділення піддоменів і Bounded Contexts, а також адекватного втілення моделі предметної області в програмному коді.

Реалізація на практиці

DDD використовують у широкому спектрі проєктів, від невеликих веб-додатків до великих корпоративних систем. Розглянемо кілька прикладів реалізації в різних галузях:

  1. Електронна комерція
  • проєктування агрегатів для управління замовленнями та інвентарем;
  • виокремлення стратегій доставки як стратегічних контекстів.
  1. Фінанси
  • моделювання рахунків і транзакцій як ядра бізнес-логіки;
  • поділ на піддомени для управління клієнтськими рахунками та управління ризиками.

Для впровадження DDD у розробку рекомендується дотримуватися таких кроків:

  1. Дослідження бізнесу
  • Проведення сесій з експертами бізнесу для виділення ключових аспектів бізнес-домену.
  • Визначення контекстів і обмежень для виділення піддоменів.
  1. Моделювання
  • Створення агрегатів і сутностей, що відображають бізнес-процеси.
  • Уточнення меж піддоменів та їхніх взаємозв’язків.
  1. Розробка коду
  • Використання мови бізнесу в коді для зменшення розриву між технічною та бізнес-спільнотою.
  • Реалізація стратегій збереження даних для агрегатів і сутностей.
Разработка кода
  1. Тестування
  • Розробка тестових випадків, що відображають бізнес-правила та обмеження.
  • Використання тестових даних, що відповідають реальним сценаріям використання.
  1. Ітеративність
  • Впровадження DDD поетапно, починаючи з критично важливих областей.
  • Регулярний обмін інформацією між командою розробки та бізнесом для корекції моделі.
  1. Оцінка та моніторинг
  • Визначення метрик якості для оцінювання ефективності реалізації DDD.
  • Систематичне збирання зворотного зв’язку для постійного вдосконалення моделі.

Сучасні технології

Розглянемо, як Domain-Driven Design взаємодіє з різними архітектурними стилями:

  1. Мікросервісна ddd архітектура
  • Фокус на піддоменах: DDD ефективно застосовується в мікросервісній архітектурі, де кожен сервіс орієнтований на конкретний бізнес-піддомен. Кожен сервіс фокусується на конкретній частині бізнесу, що ясніше визначає його функціональність і відповідальність. Така модульність спрощує як розробку, так і розуміння системи в цілому
  • Явні межі: визначення чітких меж між сервісами з використанням мови бізнесу допомагає уникнути плутанини і підвищує модульність.
  1. Подієво-орієнтована архітектура (EDA)
  • Використання подій: DDD і EDA взаємодіють через події для обміну інформацією між компонентами системи.
  • Агрегати і події: виступають у ролі джерел подій, повідомляючи про зміни свого стану.
  1. Serverless 
  • Функції як агрегати: функції можуть діяти як агрегати, обробляючи події та змінюючи свій стан за потреби.

Розглянемо основні інструменти та фреймворки, що підтримують DDD:

  • Spring Boot (Java)
  1. Spring Data JPA: спрощує роботу з персистенцією даних.
  2. Spring Cloud: для побудови мікросервісних систем, включно з підтримкою загальних контекстів.
  • Domain-Driven Design Kit (DDDKit) (Swift): надає інструменти для легшого моделювання DDD у Swift-додатках.
  • Akka (Scala/Java): дає змогу реалізовувати агрегати у вигляді акторів, забезпечуючи легке масштабування.
  • EventStorming: це не стільки інструмент, скільки підхід до спільного моделювання, що дає змогу команді розробки краще розуміти бізнес-процеси.
  • Axon Framework (Java): допомагає реалізувати принципи DDD через централізовану обробку подій.

Ці інструменти та фреймворки забезпечують різні рівні абстракції для реалізації концепцій DDD у різних мовах програмування та архітектурних стилях.

Ресурси та спільнота

Існує безліч ресурсів, які допоможуть вам вивчити DDD. Ось деякі з найпопулярніших: книжки (“Domain-Driven Design: Tackling Complexity in the Heart of Software” (Ерік Еванс): Класичний вступ до DDD від Еріка Еванса, де він докладно пояснює основні концепції, як-от агрегати, сутності та сервіси. “Implementing Domain-Driven Design” (Ван Вернум): Ця книжка надає практичні поради та приклади реалізації DDD у реальних проєктах), онлайн-курси та відеоуроки (“Domain-Driven Design Fundamentals” (Pluralsight) і “DDD with Spring Boot” (YouTube), семінари та конференції (DDD Europe: щорічна конференція, присвячена обговоренню передових ідей і практик у сфері DDD, DDD Community Events: різноманітні заходи та семінари, що проводяться спільнотою, на яких можна обмінятися досвідом з іншими учасниками і поглибити свої знання).

Підпишіться на наш Ютуб-канал! Корисні відео для програмістів чекають на вас! YouTube
Оберіть свій курс програмування! Шлях до кар’єри програміста починається тут! Подивитись

Ось кілька порад, як стати частиною спільноти:

  • Існує низка онлайн-спільнот, присвячених DDD. Приєднання до однієї з цих спільнот – це чудовий спосіб спілкуватися з іншими розробниками.
  • Відвідуйте конференції та заходи. Це чудовий спосіб дізнатися більше про метод і зустріти однодумців.
  • Відкриті проєкти – це також чудовий спосіб дізнатися більше про методику і зробити свій внесок у спільноту. Знайдіть відкритий проєкт, який використовує DDD, і запропонуйте свою допомогу.

Висновок

Що означає ddd? Це потужний підхід до проєктування, який стає дедалі популярнішим, особливо в контексті сучасних складних систем, що вимагають високої гнучкості та адаптованості.

Однак, як і будь-який інший інструмент, DDD вимагає ретельного вивчення і застосування.

Для тих, хто збирається впроваджувати цей метод у свої проєкти, важливо пам’ятати, що цей інструмент, як і будь-який інший, вимагає ретельного вивчення і розуміння. Рекомендується почати з глибокого освоєння предметної області, стратегічного проектування, і подальшого застосування ключових концепцій, таких як агрегати, сутності та обмежені контексти. У підсумку, він може стати потужним союзником у створенні гнучких і ефективних програмних рішень.

FAQ
Що таке DDD?

DDD, або Domain-Driven Design, це підхід до розроблення програмного забезпечення, який фокусується на створенні програмних рішень, заснованих на моделі предметної області. Він підкреслює важливість розуміння бізнес-процесів і правил предметної області та їх відображення в коді.

Для чого використовується DDD?

DDD використовується для спрощення складних застосунків, розбиваючи їх на більш дрібні та керовані частини, які тісно пов'язані з реальними бізнес-процесами. Це допомагає командам розробників створювати більш якісне і легко підтримуване ПЗ.

Що таке убіквітарна мова в DDD?

Убіквітарна мова в DDD - це спільна мова, яку використовують і розробники, і фахівці предметної області для спілкування та опису системи. Вона забезпечує ясність і знижує ризик непорозуміння.

Що таке обмежений контекст у DDD?

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

Які переваги надає DDD?

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

Які недоліки у DDD?

DDD може бути надмірно складним для невеликих проєктів, вимагає часу на вивчення і розуміння всією командою, і може призвести до надмірності в коді, якщо використовується неправильно.

🤔 Якщо ти вже опанував базові концепції Domain-Driven Design (DDD) з нашої статті, але залишилися запитання, не соромся, запитуй у коментарях!

Додати коментар

Ваш імейл не буде опубліковано. Обов'язкові поля відзначені *

Зберегти моє ім'я, імейл та адресу сайту у цьому браузері для майбутніх коментарів