План самостоятельного обучения DDD, CQRS, EventSourcing

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Если вы собрались плотно погрузиться в тему 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

https://docs.microsoft.com/ru-ru/archive/msdn-magazine/2009/february/best-practice-an-introduction-to-domain-driven-design

Статьи на русском по основным принципам DDD

  • https://habr.com/ru/post/316438/ часть 1

  • https://habr.com/ru/post/316890/ часть2

Книги по 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 

    1. Что такое DDD? https://blog-programmista.ru/post/132-ddd-what-is-it.html 

    2. Почему вы должны заботиться о каком-то DDD? https://habr.com/ru/post/497656/ 

    3. Важность коммуникации в DDD 

    4. Единый язык (ubiquitos language)  https://habr.com/ru/post/232881/ 

    5. Пример домена/субдомена https://mtsepkov.org/images/7/7e/CUSTIS-Tsepkov-SoftwarePeople-2013.pdf
      https://www.youtube.com/watch?v=CR9mLGN9jh0

    6. Плюсы / Минусы Подводные камни DDD

  • Проблемы моделирования в ПО

    1. Перечисление проблем

    2. Что такое домен? https://qastack.ru/software/359592/what-is-a-domain

    3. Как разбить домен на субдомены https://habr.com/ru/company/otus/blog/566742/

    4. Определение Bounded Context (ограниченный контекст)

    5. Различие между субдоменом и ограниченным контекстом

    6. Единый язык ограниченного контекста

    7. Закон Конвея 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

    8. EventStorming https://habr.com/ru/company/oleg-bunin/blog/537862/

  • Элементы доменной модели

    1. Анемичные и Богатые модели https://habr.com/ru/company/dododev/blog/532628/

    2. Сущности (Entities) в DDD и ограниченном контексте https://habr.com/ru/post/316890/

    3. Принцип Single responsibility (единственной ответственности) сущностей

    4. Ассоциации или связи

    5. Value Object https://habr.com/ru/post/316890/

    6. Отличие Entity от Value Object https://habr.com/ru/post/275599/

    7. Domain Services (службы домена) https://habr.com/ru/post/316890/

  • Агрегаты в DDD

    1. Определение и цели использования https://habr.com/ru/company/dododev/blog/532628/

    2. Корневые агрегаты

  • Репозитории в DDD https://martinfowler.com/eaaCatalog/repository.html

    1. Определение и назначение https://docs.microsoft.com/ru-ru/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design

    2. Сравнение репозиториев с фабриками

    3. Виды репозиториев

    4. Unit of work https://martinfowler.com/eaaCatalog/unitOfWork.html

  • Доменные события и Анти-Коррупционный Слой

    1. Доменные события 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

    2. Границы доменных событий

    3. Анти-коррупционный уровень 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

    1. Назначение слоев

    2. Presentation Layer

    3. Application Layer

    4. Business Logic Layer

    5. Domain Layer

    6. Infrastructure Layer

  • CQRS паттерн

    1. Определение https://microservices.io/patterns/data/cqrs.html

    2. Контекст и проблема

    3. Решение

    4. Подводные камни

    5. Когда использовать 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

    1. Контекст и проблема

    2. Решение

    3. Подводные камни

    4. Когда использовать CQRS паттерн https://martinfowler.com/eaaDev/EventSourcing.html

  • CQRS + EventSourcing

    1. Пример совместного использования

      1.  https://habr.com/ru/post/146429/

      2. https://bool.dev/blog/detail/pattern-cqrs-i-event-sourcing

  • Пример трансформации обычного приложение с “лапша-кодом” в DDD-style с пошаговыми пояснениями (Супер!) https://slides.silverfire.me/2017/yiiconf-ddd/#/

  • Пример полного сжатого изложения с примерами https://habr.com/ru/company/jugru/blog/440772/

  • Другие паттерны используемые при разработке микросервисов

    1. https://mcs.mail.ru/blog/26-osnovnyh-patternov-mikroservisnoj-razrabotki

Более полное погружение в 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://domaincentric.net/blog

  • https://microservices.io/

  • https://www.nginx.com/blog/introduction-to-microservices/

  • https://itnext.io/1-year-of-event-sourcing-and-cqrs-fb9033ccd1c6

  • https://www.semicolonworld.com/question/1310/cqrs-command-return-values

  • https://vladikk.com/2017/03/20/tackling-complexity-in-cqrs/

  • https://danielwhittaker.me/2016/04/20/how-to-validate-commands-in-a-cqrs-application/

  • https://akfpartners.com/growth-blog/cqrs-pattern

  • https://teivah.medium.com/event-sourcing-and-concurrent-updates-32354ec26a4c

  • https://habr.com/ru/company/devexpress/blog/350060/

  • https://www.sderosiaux.com/articles/2019/08/29/cqrs-why-and-all-the-things-to-consider/#why-do-we-need-it

  • https://medium.com/@sderosiaux/cqrs-what-why-how-945543482313

  • https://docs.microsoft.com/ru-ru/azure/architecture/reference-architectures/saga/saga

  • https://coderoad.ru/53688339/CQRS-event-sourcing-%D0%BF%D1%80%D0%BE%D0%B3%D0%BD%D0%BE%D0%B7%D1%8B-%D1%81-%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D0%BC%D0%B8-%D0%B0%D0%B3%D1%80%D0%B5%D0%B3%D0%B0%D1%82%D0%B0%D0%BC%D0%B8

  • https://cqrs.nu/Faq/event-sourcing

  • https://www.youtube.com/watch?v=S3f6sAXa3-c

  • 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://habr.com/ru/post/178259/

  • https://eventuate.io/post/eventuate/2020/02/24/why-eventuate.html

  • https://learn.co/lessons/microservices-patterns-chapter-7

  • https://kickstarter.engineering/event-sourcing-made-simple-4a2625113224

  • https://medium.com/@ph.dang/i-think-in-the-last-sentence-client-side-discovery-pattern-should-be-server-side-discovery-2fb14af5fad0?source=responses-----cbd54afb94f3----1----------------------------

  • 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

Буду рад комментариям и дополнениям.

Источник: https://habr.com/ru/post/653421/


Интересные статьи

Интересные статьи

Хотите узнать, как использовать Windows ML API для создания эффективных возможностей машинного обучения в Windows? Галерея примеров машинного обучения Windows точно вам поможет. Галерея - это пакетное...
Выгрузка пользователей из 1C ЗУП в Битрикс24 или правдивая история о том как настроить интеграцию 1С-Битрикс24 с ЗУП без 1С-ника.В жизни так бывает, причём бывает чаще чем хотелось бы, хоть в целом и ...
В предыдущих статьях Google Earth Engine (GEE) как общедоступный суперкомпьютер и Google Earth Engine (GEE) как общедоступный каталог больших геоданных мы познакомились со способами удобн...
Всем привет. Когда я искал информацию о журналировании (аудите событий) в Bitrix, на Хабре не было ни чего, в остальном рунете кое что было, но кто же там найдёт? Для пополнения базы знаний...
Введение Имитационное обучение с использованием мультимедийных образовательных ресурсов является одним из перспективных направлений информатизации современного образования. Под имитационным обуч...