Использование микрослужб с шаблонами DDD и CQRS для решения сложных бизнес-задачTackle Business Complexity in a Microservice with DDD and CQRS Patterns
Разработка модели предметной области для каждой микрослужбы или ограниченного контекста, который отражает понимание предметной области бизнеса.Design a domain model for each microservice or Bounded Context that reflects understanding of the business domain.
Этот раздел посвящен более сложным микрослужбам, которые реализуются для комплексных подсистем, и микрослужбам, создаваемым на основе знаний экспертов в определенной области с учетом постоянно меняющихся бизнес-правил.This section focuses on more advanced microservices that you implement when you need to tackle complex subsystems, or microservices derived from the knowledge of domain experts with ever-changing business rules. Шаблоны архитектуры, используемые в этом разделе, основаны на принципах проблемно-ориентированного проектирования (DDD) и разделения команд и запросов (CQRS), как показано на рис. 7-1.The architecture patterns used in this section are based on domain-driven design (DDD) and Command and Query Responsibility Segregation (CQRS) approaches, as illustrated in Figure 7-1.
Внешняя архитектура: шаблоны микрослужб, шлюзы API, устойчивый обмен данными, публикации и подписки и т.д. Внутривенная архитектура: управление данными, CRUD, шаблоны DDD, внедрение зависимостей, несколько библиотек и т.д.Difference between external architecture: microservice patterns, API gateways, resilient communications, pub/sub, etc., and internal architecture: data driven/CRUD, DDD patterns, dependency injection, multiple libraries, etc.
Рис. 7-1.Figure 7-1. Архитектура внешних микрослужб и внутренние шаблоны архитектуры для каждой микрослужбыExternal microservice architecture versus internal architecture patterns for each microservice
Но большинство методов, применяемых для микрослужб на основе данных, таких как способы реализации службы веб-API ASP.NET Core или предоставления метаданных Swagger с помощью Swashbuckle или NSwag, также применимы и к более сложным микрослужбам, реализуемым с помощью внутренних шаблонов DDD.However, most of the techniques for data driven microservices, such as how to implement an ASP.NET Core Web API service or how to expose Swagger metadata with Swashbuckle or NSwag, are also applicable to the more advanced microservices implemented internally with DDD patterns. Этот раздел дополняет предыдущие, так как большинство описанных ранее методов применимы и в этом случае, а также к любой из микрослужб.This section is an extension of the previous sections, because most of the practices explained earlier also apply here or for any kind of microservice.
В этом разделе сначала приводятся сведения об упрощенных шаблонах CQRS, используемых в образце приложения eShopOnContainers.This section first provides details on the simplified CQRS patterns used in the eShopOnContainers reference application. Далее вы получите представление о методах DDD, позволяющих найти общие шаблоны, которые можно повторно использовать в приложениях.Later, you will get an overview of the DDD techniques that enable you to find common patterns that you can reuse in your applications.
DDD — это обширная тема, по которой доступно множество учебных ресурсов.DDD is a large topic with a rich set of resources for learning. Вы можете начать знакомство с ней с книги Domain-Driven Design (Проблемно-ориентированное проектирование) Эрика Эванса (Eric Evans) и дополнительных материалов от Вона Вернона (Vaughn Vernon), Джимми Нилссона (Jimmy Nilsson), Грега Янга (Greg Young), Уди Дахана (Udi Dahan), Джимми Богарда (Jimmy Bogard) и многих других экспертов по DDD и CQRS.You can start with books like Domain-Driven Design by Eric Evans and additional materials from Vaughn Vernon, Jimmy Nilsson, Greg Young, Udi Dahan, Jimmy Bogard, and many other DDD/CQRS experts. Но учиться применять приемы DDD следует в первую очередь в процессе общения, проведения телеконференций и сеансов моделирования предметных областей с экспертами.But most of all you need to try to learn how to apply DDD techniques from the conversations, whiteboarding, and domain modeling sessions with the experts in your concrete business domain.
Дополнительные ресурсыAdditional resources
DDD (проблемно-ориентированное проектирование)DDD (Domain-Driven Design)
Эрик Эванс (Eric Evans). Предметно-ориентированный язык Eric Evans. Domain Language
https://domainlanguage.com/Мартин Фоулер (Martin Fowler). Предметно-ориентированное проектирование Martin Fowler. Domain-Driven Design
https://martinfowler.com/tags/domain%20driven%20design.htmlДжимми Богард (Jimmy Bogard). Усиление предметной области: руководство для начинающих Jimmy Bogard. Strengthening your domain: a primer
https://lostechies.com/jimmybogard/2010/02/04/strengthening-your-domain-a-primer/
Книги по DDDDDD books
Эрик Эванс (Eric Evans). Domain-Driven Design: Tackling Complexity in the Heart of Software (Предметно-ориентированное проектирование. Структуризация сложных программных систем) Eric Evans. Domain-Driven Design: Tackling Complexity in the Heart of Software
https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/Эрик Эванс (Eric Evans). Справочник по предметно-ориентированному проектированию: Определения и обзор шаблонов Eric Evans. Domain-Driven Design Reference: Definitions and Pattern Summaries
https://www.amazon.com/Domain-Driven-Design-Reference-Definitions-2014-09-22/dp/B01N8YB4ZO/Вон Вернон (Vaughn Vernon). Реализация проблемно-ориентированного проектирования Vaughn Vernon. Implementing Domain-Driven Design
https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577/Вон Вернон (Vaughn Vernon). Основные сведения о предметно-ориентированном проектировании Vaughn Vernon. Domain-Driven Design Distilled
https://www.amazon.com/Domain-Driven-Design-Distilled-Vaughn-Vernon/dp/0134434420/Джимми Нилссон (Jimmy Nilsson). Применение предметно-ориентированного проектирования и шаблонов Jimmy Nilsson. Applying Domain-Driven Design and Patterns
https://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/Сезар де ла Торре (Cesar de la Torre). Руководство по N-уровневой предметно-ориентированной архитектуре на .NET Cesar de la Torre. N-Layered Domain-Oriented Architecture Guide with .NET
https://www.amazon.com/N-Layered-Domain-Oriented-Architecture-Guide-NET/dp/8493903612/Абель Аврам (Abel Avram) и Флойд Маринеску (Floyd Marinescu). Кратко о предметно-ориентированном проектировании Abel Avram and Floyd Marinescu. Domain-Driven Design Quickly
https://www.amazon.com/Domain-Driven-Design-Quickly-Abel-Avram/dp/1411609255/Скотт Миллетт (Scott Millett), Ник Тюн (Nick Tune). Шаблоны, принципы и методы предметно-ориентированного проектирования Scott Millett, Nick Tune - Patterns, Principles, and Practices of Domain-Driven Design
https://www.wiley.com/Patterns%2C+Principles%2C+and+Practices+of+Domain+Driven+Design-p-9781118714706
Обучение по DDDDDD training
- Джули Лерман (Julie Lerman) и Стив Смит (Steve Smith). Основы предметно-ориентированного проектирования Julie Lerman and Steve Smith. Domain-Driven Design Fundamentals
https://bit.ly/PS-DDD