- PVSM.RU - https://www.pvsm.ru -

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

Если вы собрались плотно погрузиться в тему Doman Driven Design (DDD), о том как его применять, как использовать, для чего он нужен, и как с ним связаны Command and Query Responsibility Segregation (CQRS), Event Sourcing то можно воспользоваться планом обучения, который последовательно погрузит вас в эти темы и поможет сориентироваться. Часть информации на русском, часть на английском языке, так как русскоязычных аналогов я не смог найти.

Я рекомендую сначала ознакомиться с Базовыми видео, от основателя этого термина Эрика Эванса, чтобы понять его философию и причины возникновения.

Основы DDD от основателя. Видео.

Погружаемся в DDD

Быстрая обзорная статья по DDD от Microsoft

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

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

Книги по DDD, "о которых все говорят"

Эти книги точно стоит приобрести и прочитать, а потом много-много раз в процессе работы к ним возвращаться. Когда вас спрашивают, насколько вы знаете DDD, можете щеголять цветами прочитанных книг, посвященные в тему вас поймут :)

План обучения

Я бы даже назвал его план последовательного освоения материала, чтобы именно погружаться в тему постепенно, а не бултыхнуться в нее с кучей неизвестных терминов.

Для части пунктов не приведены ссылки сознательно, обычно одна статья покрывает несколько пунктов, поэтому воспользуйтесь ссылкой из пункта выше, чем тот который вас интересует.

Более полное погружение в DDD

Другие полезные ресурсы о DDD, CQRS, EventSourcing

Сборники ресурсов по DDD

https://github.com/heynickc/awesome-ddd#contents [78]

Сборник ресурсов по eventStorming

https://virtualddd.com/learning-ddd/awesome-eventstorming [79]

Курсы

Курс обучения (10 дней бесплатно, потом $29/месяц)

Domain-Driven Design Fundamentals

https://www.pluralsight.com/courses/domain-driven-design-fundamentals [80]

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

Автор: Волков Денис

Источник [81]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/proektirovanie-i-refaktoring/372481

Ссылки в тексте:

[1] https://www.youtube.com/watch?v=pMuiVlnGqjk: https://www.youtube.com/watch?v=pMuiVlnGqjk

[2] https://www.youtube.com/watch?v=am-HXycfalo: https://www.youtube.com/watch?v=am-HXycfalo

[3] https://www.youtube.com/watch?v=lY54TmmEllY: https://www.youtube.com/watch?v=lY54TmmEllY

[4] https://www.youtube.com/watch?v=dnUFEg68ESM&t=2270s: https://www.youtube.com/watch?v=dnUFEg68ESM&t=2270s

[5] https://www.youtube.com/watch?v=T29WzvaPNc8&t=1718s: https://www.youtube.com/watch?v=T29WzvaPNc8&t=1718s

[6] https://www.youtube.com/channel/UC3PGn-hQdbtRiqxZK9XBGqQ: https://www.youtube.com/channel/UC3PGn-hQdbtRiqxZK9XBGqQ

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

[8] https://habr.com/ru/post/316438/: https://habr.com/ru/post/316438/

[9] https://habr.com/ru/post/316890/: https://habr.com/ru/post/316890/

[10] Зеленая книга Вернона (для начала): https://www.amazon.com/Domain-Driven-Design-Distilled-Vaughn-Vernon/dp/0134434420/

[11] Красная книга Вернона (для погружения);: https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577/

[12] Синяя книга Эванса (для полного просветления);: https://www.amazon.com/-/es/Ross-Venables/dp/0321125215

[13] https://martinfowler.com/books/eaa.html: https://martinfowler.com/books/eaa.html

[14] https://blog-programmista.ru/post/132-ddd-what-is-it.html: https://blog-programmista.ru/post/132-ddd-what-is-it.html

[15] https://habr.com/ru/post/497656/: https://habr.com/ru/post/497656/

[16] https://habr.com/ru/post/232881/: https://habr.com/ru/post/232881/

[17] https://mtsepkov.org/images/7/7e/CUSTIS-Tsepkov-SoftwarePeople-2013.pdf
: https://mtsepkov.org/images/7/7e/CUSTIS-Tsepkov-SoftwarePeople-2013.pdf

[18] https://www.youtube.com/watch?v=CR9mLGN9jh0: https://www.youtube.com/watch?v=CR9mLGN9jh0

[19] https://qastack.ru/software/359592/what-is-a-domain: https://qastack.ru/software/359592/what-is-a-domain

[20] https://habr.com/ru/company/otus/blog/566742/: https://habr.com/ru/company/otus/blog/566742/

[21] 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: 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

[22] https://habr.com/ru/company/oleg-bunin/blog/537862/: https://habr.com/ru/company/oleg-bunin/blog/537862/

[23] https://habr.com/ru/company/dododev/blog/532628/: https://habr.com/ru/company/dododev/blog/532628/

[24] https://habr.com/ru/post/275599/: https://habr.com/ru/post/275599/

[25] https://martinfowler.com/eaaCatalog/repository.html: https://martinfowler.com/eaaCatalog/repository.html

[26] https://docs.microsoft.com/ru-ru/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design: https://docs.microsoft.com/ru-ru/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design

[27] https://martinfowler.com/eaaCatalog/unitOfWork.html: https://martinfowler.com/eaaCatalog/unitOfWork.html

[28] https://docs.microsoft.com/ru-ru/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/domain-events-design-implementation: https://docs.microsoft.com/ru-ru/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/domain-events-design-implementation

[29] https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf#page=25: https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf#page=25

[30] https://russianblogs.com/article/2365847005/: https://russianblogs.com/article/2365847005/

[31] https://star-wiki.ru/wiki/Eventual_consistency: https://star-wiki.ru/wiki/Eventual_consistency

[32] 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: 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

[33] https://microservices.io/patterns/data/cqrs.html: https://microservices.io/patterns/data/cqrs.html

[34] https://martinfowler.com/bliki/CQRS.html
: https://martinfowler.com/bliki/CQRS.html

[35] https://www.objectivity.co.uk/blog/when-to-use-and-not-to-use-cqrs/: https://www.objectivity.co.uk/blog/when-to-use-and-not-to-use-cqrs/

[36] https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing: https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing

[37] https://martinfowler.com/eaaDev/EventSourcing.html: https://martinfowler.com/eaaDev/EventSourcing.html

[38] https://habr.com/ru/post/146429/: https://habr.com/ru/post/146429/

[39] https://bool.dev/blog/detail/pattern-cqrs-i-event-sourcing: https://bool.dev/blog/detail/pattern-cqrs-i-event-sourcing

[40] https://slides.silverfire.me/2017/yiiconf-ddd/#/: https://slides.silverfire.me/2017/yiiconf-ddd/#/

[41] https://habr.com/ru/company/jugru/blog/440772/: https://habr.com/ru/company/jugru/blog/440772/

[42] https://mcs.mail.ru/blog/26-osnovnyh-patternov-mikroservisnoj-razrabotki: https://mcs.mail.ru/blog/26-osnovnyh-patternov-mikroservisnoj-razrabotki

[43] https://www.infoq.com/news/2015/09/domain-events-consistency: https://www.infoq.com/news/2015/09/domain-events-consistency

[44] https://lostechies.com/jimmybogard/2014/05/13/a-better-domain-events-pattern/: https://lostechies.com/jimmybogard/2014/05/13/a-better-domain-events-pattern/

[45] https://dddcommunity.org/wp-content/uploads/files/pdf_articles/Vernon_2011_2.pdf: https://dddcommunity.org/wp-content/uploads/files/pdf_articles/Vernon_2011_2.pdf

[46] https://lostechies.com/jimmybogard/2010/04/08/strengthening-your-domain-domain-events/: https://lostechies.com/jimmybogard/2010/04/08/strengthening-your-domain-domain-events/

[47] https://www.tonytruong.net/domain-events-pattern-example/: https://www.tonytruong.net/domain-events-pattern-example/

[48] https://udidahan.com/2008/02/29/how-to-create-fully-encapsulated-domain-models/: https://udidahan.com/2008/02/29/how-to-create-fully-encapsulated-domain-models/

[49] https://udidahan.com/2008/08/25/domain-events-take-2/: https://udidahan.com/2008/08/25/domain-events-take-2/

[50] https://udidahan.com/2009/06/14/domain-events-salvation/: https://udidahan.com/2009/06/14/domain-events-salvation/

[51] https://blog.jayway.com/2013/06/20/dont-publish-domain-events-return-them/: https://blog.jayway.com/2013/06/20/dont-publish-domain-events-return-them/

[52] https://devblogs.microsoft.com/cesardelatorre/domain-events-vs-integration-events-in-domain-driven-design-and-microservices-architectures/: https://devblogs.microsoft.com/cesardelatorre/domain-events-vs-integration-events-in-domain-driven-design-and-microservices-architectures/

[53] https://domaincentric.net/blog: https://domaincentric.net/blog

[54] https://microservices.io/: https://microservices.io/

[55] https://www.nginx.com/blog/introduction-to-microservices/: https://www.nginx.com/blog/introduction-to-microservices/

[56] https://itnext.io/1-year-of-event-sourcing-and-cqrs-fb9033ccd1c6: https://itnext.io/1-year-of-event-sourcing-and-cqrs-fb9033ccd1c6

[57] https://www.semicolonworld.com/question/1310/cqrs-command-return-values: https://www.semicolonworld.com/question/1310/cqrs-command-return-values

[58] https://vladikk.com/2017/03/20/tackling-complexity-in-cqrs/: https://vladikk.com/2017/03/20/tackling-complexity-in-cqrs/

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

[60] https://akfpartners.com/growth-blog/cqrs-pattern: https://akfpartners.com/growth-blog/cqrs-pattern

[61] https://teivah.medium.com/event-sourcing-and-concurrent-updates-32354ec26a4c: https://teivah.medium.com/event-sourcing-and-concurrent-updates-32354ec26a4c

[62] https://habr.com/ru/company/devexpress/blog/350060/: https://habr.com/ru/company/devexpress/blog/350060/

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

[64] https://medium.com/@sderosiaux/cqrs-what-why-how-945543482313: https://medium.com/@sderosiaux/cqrs-what-why-how-945543482313

[65] https://docs.microsoft.com/ru-ru/azure/architecture/reference-architectures/saga/saga: https://docs.microsoft.com/ru-ru/azure/architecture/reference-architectures/saga/saga

[66] 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://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

[67] https://cqrs.nu/Faq/event-sourcing: https://cqrs.nu/Faq/event-sourcing

[68] https://www.youtube.com/watch?v=S3f6sAXa3-c: https://www.youtube.com/watch?v=S3f6sAXa3-c

[69] https://medium.com/nexa-digital/my-journey-into-cqrs-and-event-sourcing-4bd7d0c1c670: https://medium.com/nexa-digital/my-journey-into-cqrs-and-event-sourcing-4bd7d0c1c670

[70] https://www.sitepen.com/blog/architecture-spotlight-event-sourcing: https://www.sitepen.com/blog/architecture-spotlight-event-sourcing

[71] https://www.confluent.io/blog/event-sourcing-cqrs-stream-processing-apache-kafka-whats-connection/: https://www.confluent.io/blog/event-sourcing-cqrs-stream-processing-apache-kafka-whats-connection/

[72] https://habr.com/ru/post/178259/: https://habr.com/ru/post/178259/

[73] https://eventuate.io/post/eventuate/2020/02/24/why-eventuate.html: https://eventuate.io/post/eventuate/2020/02/24/why-eventuate.html

[74] https://learn.co/lessons/microservices-patterns-chapter-7: https://learn.co/lessons/microservices-patterns-chapter-7

[75] https://kickstarter.engineering/event-sourcing-made-simple-4a2625113224: https://kickstarter.engineering/event-sourcing-made-simple-4a2625113224

[76] 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://medium.com/@ph.dang/i-think-in-the-last-sentence-client-side-discovery-pattern-should-be-server-side-discovery-2fb14af5fad0?source=responses-----cbd54afb94f3----1----------------------------

[77] https://livebook.manning.com/book/microservices-patterns/chapter-7/25: https://livebook.manning.com/book/microservices-patterns/chapter-7/25

[78] https://github.com/heynickc/awesome-ddd#contents: https://github.com/heynickc/awesome-ddd#contents

[79] https://virtualddd.com/learning-ddd/awesome-eventstorming: https://virtualddd.com/learning-ddd/awesome-eventstorming

[80] https://www.pluralsight.com/courses/domain-driven-design-fundamentals: https://www.pluralsight.com/courses/domain-driven-design-fundamentals

[81] Источник: https://habr.com/ru/post/653421/?utm_source=habrahabr&utm_medium=rss&utm_campaign=653421