From 336e75d22240bafc35efd6ec2dd92c1e1409460a Mon Sep 17 00:00:00 2001 From: quassbottle Date: Tue, 4 Feb 2025 13:29:08 +0300 Subject: [PATCH 1/6] ddd topic --- backend/shared/middle-1/ddd.md | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 backend/shared/middle-1/ddd.md diff --git a/backend/shared/middle-1/ddd.md b/backend/shared/middle-1/ddd.md new file mode 100644 index 00000000..8a1b8f1a --- /dev/null +++ b/backend/shared/middle-1/ddd.md @@ -0,0 +1,51 @@ +### Domain-Driven Design (DDD) + +#### **Strategic Design** +- Что такое Domain-Driven Design (DDD)? Каковы его цели и задачи? +- В чем заключается стратегическое проектирование в DDD? +- Какова роль эксперта предметной области в DDD? +- Что такое предметная область (Domain) и почему важно ее правильное моделирование? +- Какие бывают типы доменов: Core Domain, Supporting Domain, Generic Domain? +- Какие основные принципы лежат в основе DDD? +- Что такое Ubiquitous Language (единый язык) и почему он важен? +- Какие требования предъявляются к единому языку в рамках проекта? +- Что такое модель предметной области (Domain Model)? +- Как организовано разделение ответственности в DDD? + - Что такое Subdomain? + - Что такое Problem Domain? + - Что такое Bounded Context и почему он важен? + - В чем разница между Bounded Context и Subdomain? + - Как применяется единый язык внутри системы? +- Как организовать взаимодействие между несколькими Bounded Context внутри одной системы? + - Паттерн **Cooperation** – когда стоит использовать? + - Паттерн **Partnership** – когда стоит использовать? + - Паттерн **Shared Kernel** – когда стоит использовать? + - Паттерн **Conformist** – когда стоит использовать? + - Что такое **Anticorruption Layer (ACL)** и зачем он нужен? + - Паттерн **Open-Host Service** – когда стоит использовать? + - Паттерн **Customer-Supplier** – когда стоит использовать? + - Паттерн **Separate Ways** – когда стоит использовать? +- Что такое Context Map (карта контекстов) и зачем нужен Context Mapping? +- Почему DDD не всегда применим во всех проектах? + +#### **Tactical Design** +- Что такое тактическое проектирование и чем оно отличается от стратегического? +- В чем отличие DDD от data-oriented и service-oriented подходов? +- Что такое чистая архитектура? Из каких слоев она состоит и как применяется в DDD? +- Что такое Value Object (объект-значение)? +- Что такое Entity (сущность) и как ее правильно моделировать? +- Что такое Aggregate (агрегат) и в чем его отличие от сущности? +- Что такое Domain Event (событие предметной области) и как его использовать? +- Что такое Domain Service и в каких случаях он нужен? +- Какие архитектурные паттерны применяются в DDD? + - Какие слои входят в Layered Architecture (слоистая архитектура)? Как они связываются? Зачем они нужны? + - Что такое Ports and Adapters Architecture (архитектура портов и адаптеров)? Чем она лучше слоистой архитектуры? + - Что такое CQRS? Для чего он нужен? Как он применяется в DDD? + - Что такое Event-driven Design? Для чего он нужен? Как он применяется в DDD? +- Как DDD соотносится с архитектурой микросервисов? + +### **Ресурсы** +- Хононов Влад. *Изучаем DDD - предметно-ориентированное проектирование* +- Вернон Вон. *Реализация методов предметно-ориентированного проектирования* +- Владимир Хориков – *Domain-Driven Design: самое важное* ([Видео](https://www.youtube.com/watch?v=JOy_SNK3qj4)) +- Ричард Маркс, Форд Нил. *Фундаментальный подход к программной архитектуре: паттерны, свойства, проверенные методы* From 6787d9c6a55e55c8d3b70920859f8c73634de2bb Mon Sep 17 00:00:00 2001 From: quassbottle Date: Tue, 4 Feb 2025 13:34:09 +0300 Subject: [PATCH 2/6] fix --- backend/shared/middle-1/ddd.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/backend/shared/middle-1/ddd.md b/backend/shared/middle-1/ddd.md index 8a1b8f1a..0bd620d2 100644 --- a/backend/shared/middle-1/ddd.md +++ b/backend/shared/middle-1/ddd.md @@ -7,7 +7,7 @@ - Что такое предметная область (Domain) и почему важно ее правильное моделирование? - Какие бывают типы доменов: Core Domain, Supporting Domain, Generic Domain? - Какие основные принципы лежат в основе DDD? -- Что такое Ubiquitous Language (единый язык) и почему он важен? +- Что такое Ubiquitous Language (единый язык). Почему он важен в DDD-проектах? - Какие требования предъявляются к единому языку в рамках проекта? - Что такое модель предметной области (Domain Model)? - Как организовано разделение ответственности в DDD? @@ -25,18 +25,18 @@ - Паттерн **Open-Host Service** – когда стоит использовать? - Паттерн **Customer-Supplier** – когда стоит использовать? - Паттерн **Separate Ways** – когда стоит использовать? -- Что такое Context Map (карта контекстов) и зачем нужен Context Mapping? +- Что такое Context Map (карта контекстов). Зачем нужен Context Mapping? - Почему DDD не всегда применим во всех проектах? #### **Tactical Design** - Что такое тактическое проектирование и чем оно отличается от стратегического? - В чем отличие DDD от data-oriented и service-oriented подходов? - Что такое чистая архитектура? Из каких слоев она состоит и как применяется в DDD? -- Что такое Value Object (объект-значение)? -- Что такое Entity (сущность) и как ее правильно моделировать? -- Что такое Aggregate (агрегат) и в чем его отличие от сущности? -- Что такое Domain Event (событие предметной области) и как его использовать? -- Что такое Domain Service и в каких случаях он нужен? +- Что такое Value Object (объект-значение)? Для чего применяется? +- Что такое Entity (сущность)? +- Что такое Aggregate (агрегат). В чем его отличие от сущности? +- Что такое Domain Events (события предметной области). Зачем и как их использовать? +- Что такое Domain Service. В каких случаях он нужен? - Какие архитектурные паттерны применяются в DDD? - Какие слои входят в Layered Architecture (слоистая архитектура)? Как они связываются? Зачем они нужны? - Что такое Ports and Adapters Architecture (архитектура портов и адаптеров)? Чем она лучше слоистой архитектуры? From cd7941d03f9adcb0ed8b4e9658ff342c5fd6bce2 Mon Sep 17 00:00:00 2001 From: quassbottle Date: Tue, 4 Feb 2025 14:12:28 +0300 Subject: [PATCH 3/6] fix video url --- backend/shared/middle-1/ddd.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/shared/middle-1/ddd.md b/backend/shared/middle-1/ddd.md index 0bd620d2..9b708730 100644 --- a/backend/shared/middle-1/ddd.md +++ b/backend/shared/middle-1/ddd.md @@ -47,5 +47,5 @@ ### **Ресурсы** - Хононов Влад. *Изучаем DDD - предметно-ориентированное проектирование* - Вернон Вон. *Реализация методов предметно-ориентированного проектирования* -- Владимир Хориков – *Domain-Driven Design: самое важное* ([Видео](https://www.youtube.com/watch?v=JOy_SNK3qj4)) +- [Владимир Хориков – *Domain-Driven Design: самое важное*](https://www.youtube.com/watch?v=JOy_SNK3qj4) - Ричард Маркс, Форд Нил. *Фундаментальный подход к программной архитектуре: паттерны, свойства, проверенные методы* From f4c10560cbcf7647cb9284490e33fd241677789f Mon Sep 17 00:00:00 2001 From: quassbottle <48488634+quassbottle@users.noreply.github.com> Date: Wed, 5 Feb 2025 20:07:25 +0300 Subject: [PATCH 4/6] add anemic question --- backend/shared/middle-1/ddd.md | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/shared/middle-1/ddd.md b/backend/shared/middle-1/ddd.md index 9b708730..c146c150 100644 --- a/backend/shared/middle-1/ddd.md +++ b/backend/shared/middle-1/ddd.md @@ -35,6 +35,7 @@ - Что такое Value Object (объект-значение)? Для чего применяется? - Что такое Entity (сущность)? - Что такое Aggregate (агрегат). В чем его отличие от сущности? +- Что такое анемичная модель? Почему это плохо? Как с этим бороться? - Что такое Domain Events (события предметной области). Зачем и как их использовать? - Что такое Domain Service. В каких случаях он нужен? - Какие архитектурные паттерны применяются в DDD? From 3a7dbb8970a4248714aaf3110ce7e9748556b517 Mon Sep 17 00:00:00 2001 From: quassbottle <48488634+quassbottle@users.noreply.github.com> Date: Wed, 5 Feb 2025 20:08:50 +0300 Subject: [PATCH 5/6] add solution and problem space --- backend/shared/middle-1/ddd.md | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/shared/middle-1/ddd.md b/backend/shared/middle-1/ddd.md index c146c150..375189c1 100644 --- a/backend/shared/middle-1/ddd.md +++ b/backend/shared/middle-1/ddd.md @@ -16,6 +16,7 @@ - Что такое Bounded Context и почему он важен? - В чем разница между Bounded Context и Subdomain? - Как применяется единый язык внутри системы? +- Что такое Problem и Solution Space? - Как организовать взаимодействие между несколькими Bounded Context внутри одной системы? - Паттерн **Cooperation** – когда стоит использовать? - Паттерн **Partnership** – когда стоит использовать? From ca611d0b2ea319978a792991506cbf4ab8dfd8fb Mon Sep 17 00:00:00 2001 From: quassbottle Date: Wed, 14 May 2025 18:32:12 +0300 Subject: [PATCH 6/6] remove question --- backend/shared/middle-1/ddd.md | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/shared/middle-1/ddd.md b/backend/shared/middle-1/ddd.md index 9b708730..ced3d8ed 100644 --- a/backend/shared/middle-1/ddd.md +++ b/backend/shared/middle-1/ddd.md @@ -6,7 +6,6 @@ - Какова роль эксперта предметной области в DDD? - Что такое предметная область (Domain) и почему важно ее правильное моделирование? - Какие бывают типы доменов: Core Domain, Supporting Domain, Generic Domain? -- Какие основные принципы лежат в основе DDD? - Что такое Ubiquitous Language (единый язык). Почему он важен в DDD-проектах? - Какие требования предъявляются к единому языку в рамках проекта? - Что такое модель предметной области (Domain Model)?