Если вы собрались плотно погрузиться в тему Doman Driven Design (DDD), о том как его применять, как использовать, для чего он нужен, и как с ним связаны Command and Query Responsibility Segregation (CQRS), Event Sourcing то можно воспользоваться планом обучения, который последовательно погрузит вас в эти темы и поможет сориентироваться. Часть информации на русском, часть на английском языке, так как русскоязычных аналогов я не смог найти.
Я рекомендую сначала ознакомиться с Базовыми видео, от основателя этого термина Эрика Эванса, чтобы понять его философию и причины возникновения.
Основы DDD от основателя. Видео.
-
Что такое DDD от Эрика Эванса https://www.youtube.com/watch?v=pMuiVlnGqjk
-
Ограниченные контексты от Эрика Эванса https://www.youtube.com/watch?v=am-HXycfalo
-
Хорошая архитектура - не идеальная архитектура от Эрика Эванса https://www.youtube.com/watch?v=lY54TmmEllY
-
Боремся со сложностью в сердце программного обеспечения от Эрика Эванса https://www.youtube.com/watch?v=dnUFEg68ESM&t=2270s
-
Пример моделирования DDD от Эрика Эванса https://www.youtube.com/watch?v=T29WzvaPNc8&t=1718s
-
Канал конференции по DDD где можно найти другие выступления Эрика Эванса и других спикеров https://www.youtube.com/channel/UC3PGn-hQdbtRiqxZK9XBGqQ
Погружаемся в DDD
Быстрая обзорная статья по DDD от Microsoft
Статьи на русском по основным принципам DDD
-
https://habr.com/ru/post/316438/ часть 1
Книги по DDD, "о которых все говорят"
Эти книги точно стоит приобрести и прочитать, а потом много-много раз в процессе работы к ним возвращаться. Когда вас спрашивают, насколько вы знаете DDD, можете щеголять цветами прочитанных книг, посвященные в тему вас поймут :)
-
Зеленая книга Вернона (для начала) Domain-Driven Design Distilled 1st Edition by de Vaughn Vernon
Красная книга Вернона (для погружения); Implementing Domain-Driven Design 1st Edition by Vaughn Vernon
-
Синяя книга Эванса (для полного просветления); Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans
-
https://martinfowler.com/books/eaa.html Паттерны в Enterprise приложениях от Мартина Фаулера
План обучения
Я бы даже назвал его план последовательного освоения материала, чтобы именно погружаться в тему постепенно, а не бултыхнуться в нее с кучей неизвестных терминов.
Для части пунктов не приведены ссылки сознательно, обычно одна статья покрывает несколько пунктов, поэтому воспользуйтесь ссылкой из пункта выше, чем тот который вас интересует.
-
Введение в DDD
-
Что такое DDD? https://blog-programmista.ru/post/132-ddd-what-is-it.html
-
Почему вы должны заботиться о каком-то DDD? https://habr.com/ru/post/497656/
-
Важность коммуникации в DDD
-
Единый язык (ubiquitos language) https://habr.com/ru/post/232881/
-
Пример домена/субдомена https://mtsepkov.org/images/7/7e/CUSTIS-Tsepkov-SoftwarePeople-2013.pdf
https://www.youtube.com/watch?v=CR9mLGN9jh0 -
Плюсы / Минусы Подводные камни DDD
-
-
Проблемы моделирования в ПО
-
Перечисление проблем
-
Что такое домен? https://qastack.ru/software/359592/what-is-a-domain
-
Как разбить домен на субдомены https://habr.com/ru/company/otus/blog/566742/
-
Определение Bounded Context (ограниченный контекст)
-
Различие между субдоменом и ограниченным контекстом
-
Единый язык ограниченного контекста
-
Закон Конвея https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%9A%D0%BE%D0%BD%D0%B2%D0%B5%D1%8F
-
EventStorming https://habr.com/ru/company/oleg-bunin/blog/537862/
-
-
Элементы доменной модели
-
Анемичные и Богатые модели https://habr.com/ru/company/dododev/blog/532628/
-
Сущности (Entities) в DDD и ограниченном контексте https://habr.com/ru/post/316890/
-
Принцип Single responsibility (единственной ответственности) сущностей
-
Ассоциации или связи
-
Value Object https://habr.com/ru/post/316890/
-
Отличие Entity от Value Object https://habr.com/ru/post/275599/
-
Domain Services (службы домена) https://habr.com/ru/post/316890/
-
-
Агрегаты в DDD
-
Определение и цели использования https://habr.com/ru/company/dododev/blog/532628/
-
Корневые агрегаты
-
-
Репозитории в DDD https://martinfowler.com/eaaCatalog/repository.html
-
Определение и назначение https://docs.microsoft.com/ru-ru/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design
-
Сравнение репозиториев с фабриками
-
Виды репозиториев
-
Unit of work https://martinfowler.com/eaaCatalog/unitOfWork.html
-
-
Доменные события и Анти-Коррупционный Слой
-
Доменные события https://docs.microsoft.com/ru-ru/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/domain-events-design-implementation
Грег Янг (Greg Young). Что такое событие предметной области? https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf#page=25
-
Границы доменных событий
-
Анти-коррупционный уровень https://russianblogs.com/article/2365847005/
-
-
Eventual Consistency https://star-wiki.ru/wiki/Eventual_consistency
-
Слои в DDD приложении https://ademcatamak.medium.com/layers-in-ddd-projects-bd492aa2b8aa#:~:text=Layers%20in%20DDD%20Projects&text=In%20projects%20developed%20with%20the,try%20to%20explain%20with%20examples
-
Назначение слоев
-
Presentation Layer
-
Application Layer
-
Business Logic Layer
-
Domain Layer
-
Infrastructure Layer
-
-
CQRS паттерн
-
Определение https://microservices.io/patterns/data/cqrs.html
-
Контекст и проблема
-
Решение
-
Подводные камни
-
Когда использовать CQRS паттерн https://martinfowler.com/bliki/CQRS.html
https://www.objectivity.co.uk/blog/when-to-use-and-not-to-use-cqrs/
-
-
Event Sourcing паттерн https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing
-
Контекст и проблема
-
Решение
-
Подводные камни
-
Когда использовать CQRS паттерн https://martinfowler.com/eaaDev/EventSourcing.html
-
-
CQRS + EventSourcing
-
Пример совместного использования
-
-
Пример трансформации обычного приложение с “лапша-кодом” в DDD-style с пошаговыми пояснениями (Супер!) https://slides.silverfire.me/2017/yiiconf-ddd/#/
-
Пример полного сжатого изложения с примерами https://habr.com/ru/company/jugru/blog/440772/
-
Другие паттерны используемые при разработке микросервисов
Более полное погружение в DDD
-
Грег Янг (Greg Young). Что такое событие предметной области? https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf#page=25
-
Ян Стенберг (Jan Stenberg). События предметной области и итоговая согласованность https://www.infoq.com/news/2015/09/domain-events-consistency
-
Джимми Богард (Jimmy Bogard). Улучшенный шаблон событий предметной области https://lostechies.com/jimmybogard/2014/05/13/a-better-domain-events-pattern/
-
Вон Вернон (Vaughn Vernon). Эффективная конструкция агрегата. Часть II. Организация совместной работы агрегатов https://dddcommunity.org/wp-content/uploads/files/pdf_articles/Vernon_2011_2.pdf
-
Джимми Богард (Jimmy Bogard). Усиление предметной области: события предметной области https://lostechies.com/jimmybogard/2010/04/08/strengthening-your-domain-domain-events/
-
Тони Чыонг (Tony Truong). Пример шаблона событий предметной области https://www.tonytruong.net/domain-events-pattern-example/
-
Уди Дахан (Udi Dahan). Создание полностью инкапсулированных моделей предметной области https://udidahan.com/2008/02/29/how-to-create-fully-encapsulated-domain-models/
-
Уди Дахан (Udi Dahan). События предметной области. Попытка 2 https://udidahan.com/2008/08/25/domain-events-take-2/
-
Уди Дахан (Udi Dahan). События предметной области. Спасение https://udidahan.com/2009/06/14/domain-events-salvation/
-
Ян Кронквист (Jan Kronquist). Не публикуйте события предметной области, а возвращайте их! https://blog.jayway.com/2013/06/20/dont-publish-domain-events-return-them/
-
Сезар де ла Торре (Cesar de la Torre). События предметной области Интеграция событий в DDD и архитектуры микрослужб https://devblogs.microsoft.com/cesardelatorre/domain-events-vs-integration-events-in-domain-driven-design-and-microservices-architectures/
Другие полезные ресурсы о DDD, CQRS, EventSourcing
-
https://itnext.io/1-year-of-event-sourcing-and-cqrs-fb9033ccd1c6
-
https://www.semicolonworld.com/question/1310/cqrs-command-return-values
-
https://danielwhittaker.me/2016/04/20/how-to-validate-commands-in-a-cqrs-application/
-
https://teivah.medium.com/event-sourcing-and-concurrent-updates-32354ec26a4c
-
https://medium.com/@sderosiaux/cqrs-what-why-how-945543482313
-
https://docs.microsoft.com/ru-ru/azure/architecture/reference-architectures/saga/saga
-
https://medium.com/nexa-digital/my-journey-into-cqrs-and-event-sourcing-4bd7d0c1c670
-
https://www.sitepen.com/blog/architecture-spotlight-event-sourcing
-
https://www.confluent.io/blog/event-sourcing-cqrs-stream-processing-apache-kafka-whats-connection/
-
https://eventuate.io/post/eventuate/2020/02/24/why-eventuate.html
-
https://kickstarter.engineering/event-sourcing-made-simple-4a2625113224
-
https://livebook.manning.com/book/microservices-patterns/chapter-7/25
Сборники ресурсов по DDD
https://github.com/heynickc/awesome-ddd#contents
Сборник ресурсов по eventStorming
https://virtualddd.com/learning-ddd/awesome-eventstorming
Курсы
Курс обучения (10 дней бесплатно, потом $29/месяц)
Domain-Driven Design Fundamentals
https://www.pluralsight.com/courses/domain-driven-design-fundamentals
Буду рад комментариям и дополнениям.
Автор: Волков Денис