Использование микрослужб с шаблонами DDD и CQRS для решения сложных бизнес-задач
Совет
Это содержимое является фрагментом из электронной книги, архитектуры микрослужб .NET для контейнерных приложений .NET, доступных в документации .NET или в виде бесплатного скачиваемого PDF-файла, который можно прочитать в автономном режиме.
Разработка модели предметной области для каждой микрослужбы или ограниченного контекста, который отражает понимание предметной области бизнеса.
Этот раздел посвящен более сложным микрослужбам, которые реализуются для комплексных подсистем, и микрослужбам, создаваемым на основе знаний экспертов в определенной области с учетом постоянно меняющихся бизнес-правил. Шаблоны архитектуры, используемые в этом разделе, основаны на принципах проблемно-ориентированного проектирования (DDD) и разделения команд и запросов (CQRS), как показано на рис. 7-1.
Внешняя архитектура: шаблоны микрослужб, шлюзы API, устойчивый обмен данными, публикации и подписки и т.д. Внутривенная архитектура: управление данными, CRUD, шаблоны DDD, внедрение зависимостей, несколько библиотек и т.д.
Рис. 7-1. Архитектура внешних микрослужб и внутренние шаблоны архитектуры для каждой микрослужбы
Но большинство методов, применяемых для микрослужб на основе данных, таких как способы реализации службы веб-API ASP.NET Core или предоставления метаданных Swagger с помощью Swashbuckle или NSwag, также применимы и к более сложным микрослужбам, реализуемым с помощью внутренних шаблонов DDD. Этот раздел дополняет предыдущие, так как большинство описанных ранее методов применимы и в этом случае, а также к любой из микрослужб.
В этом разделе сначала приводятся сведения об упрощенных шаблонах CQRS, используемых в образце приложения eShopOnContainers. Далее вы получите представление о методах DDD, позволяющих найти общие шаблоны, которые можно повторно использовать в приложениях.
DDD — это обширная тема, по которой доступно множество учебных ресурсов. Вы можете начать знакомство с ней с книги Domain-Driven Design (Проблемно-ориентированное проектирование) Эрика Эванса (Eric Evans) и дополнительных материалов от Вона Вернона (Vaughn Vernon), Джимми Нилссона (Jimmy Nilsson), Грега Янга (Greg Young), Уди Дахана (Udi Dahan), Джимми Богарда (Jimmy Bogard) и многих других экспертов по DDD и CQRS. Но учиться применять приемы DDD следует в первую очередь в процессе общения, проведения телеконференций и сеансов моделирования предметных областей с экспертами.
Дополнительные ресурсы
DDD (проблемно-ориентированное проектирование)
Эрик Эванс (Eric Evans). Domain Language (Предметно-ориентированный язык)
https://domainlanguage.com/Мартин Фаулер. проектирование Domain-Driven
https://martinfowler.com/tags/domain%20driven%20design.htmlДжимми Богард (Jimmy Bogard). Strengthening Your Domain: A Primer (Усиление предметной области: учебник для начинающих)
https://lostechies.com/jimmybogard/2010/02/04/strengthening-your-domain-a-primer/
Книги по DDD
Эрик Эванс (Eric Evans). Предметно-ориентированное проектирование. Структуризация сложных программных систем
https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/Эрик Эванс (Eric Evans). Справочник по предметно-ориентированному проектированию: общие сведения об определениях и шаблонах
https://www.amazon.com/Domain-Driven-Design-Reference-Definitions-2014-09-22/dp/B01N8YB4ZO/Вон Вернон (Vaughn Vernon). Реализация предметно-ориентированного проектирования
https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577/Вон Вернон (Vaughn Vernon). Предметно-ориентированное проектирование. Самое основное
https://www.amazon.com/Domain-Driven-Design-Distilled-Vaughn-Vernon/dp/0134434420/Джимми Нилссон (Jimmy Nilsson). Применение DDD и шаблонов проектирования
https://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/Сезар де ла Торре (Cesar de la Torre). N-Layered Domain-Oriented Architecture Guide with .NET (Руководство по N-уровневой предметно-ориентированной архитектуре на .NET)
https://www.amazon.com/N-Layered-Domain-Oriented-Architecture-Guide-NET/dp/8493903612/Абель Аврам (Abel Avram) и Флойд Маринеску (Floyd Marinescu). Domain-Driven Design Quickly (Предметно-ориентированное проектирование: кратко)
https://www.amazon.com/Domain-Driven-Design-Quickly-Abel-Avram/dp/1411609255/Скотт Миллетт (Scott Millett), Ник Тюн (Nick Tune). Шаблоны, принципы и методы предметно-ориентированного проектирования
https://www.wiley.com/Patterns%2C+Principles%2C+and+Practices+of+Domain+Driven+Design-p-9781118714706
Обучение по DDD
- Джули Лерман (Julie Lerman) и Стив Смит (Steve Smith). Domain-Driven Design Fundamentals (Основы предметно-ориентированного проектирования)
https://bit.ly/PS-DDD