diff --git a/backend/shared/middle-1/ddd.md b/backend/shared/middle-1/ddd.md new file mode 100644 index 00000000..f656ad13 --- /dev/null +++ b/backend/shared/middle-1/ddd.md @@ -0,0 +1,52 @@ +### Domain-Driven Design (DDD) + +#### **Strategic Design** +- Что такое Domain-Driven Design (DDD)? Каковы его цели и задачи? +- В чем заключается стратегическое проектирование в DDD? +- Какова роль эксперта предметной области в DDD? +- Что такое предметная область (Domain) и почему важно ее правильное моделирование? +- Какие бывают типы доменов: Core Domain, Supporting Domain, Generic Domain? +- Что такое Ubiquitous Language (единый язык). Почему он важен в DDD-проектах? +- Какие требования предъявляются к единому языку в рамках проекта? +- Что такое модель предметной области (Domain Model)? +- Как организовано разделение ответственности в DDD? + - Что такое Subdomain? + - Что такое Problem Domain? + - Что такое Bounded Context и почему он важен? + - В чем разница между Bounded Context и Subdomain? + - Как применяется единый язык внутри системы? +- Что такое Problem и Solution Space? +- Как организовать взаимодействие между несколькими 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 Events (события предметной области). Зачем и как их использовать? +- Что такое 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) +- Ричард Маркс, Форд Нил. *Фундаментальный подход к программной архитектуре: паттерны, свойства, проверенные методы*