Gestire la complessità aziendale in un microservizio con i modelli DDD e CQRS
Suggerimento
Questo contenuto è un estratto dell'eBook "Microservizi .NET: Architettura per le applicazioni .NET incluse in contenitori", disponibile in .NET Docs o come PDF scaricabile gratuitamente che può essere letto offline.
Progettare un modello di dominio per ogni microservizio o contesto vincolato che rispecchi le informazioni esistenti sul dominio aziendale.
Questa sezione illustra i microservizi più avanzati implementabili quando è necessario gestire sottosistemi complessi o i microservizi derivati dalla conoscenza degli esperti del settore con regole business in continua evoluzione. I modelli di architettura usati in questa sezione si basano su approcci per la progettazione basata su domini (DDD) e la separazione di responsabilità per query e comandi (CQRS), come illustrato nella figura 7-1.
Differenza tra l'architettura esterna (modelli di microservizio, gateway API, comunicazioni resilienti, pubblicazione/sottoscrizione e così via) e l'architettura interna (basata su dati/CRUD, modelli DDD, inserimento di dipendenze, librerie multiple e così via).
Figura 7-1. Architettura di microservizi esterna e modelli di architettura interna per ogni microservizio a confronto
Tuttavia, la maggior parte delle tecniche per microservizi basati sui dati, ad esempio come implementare un servizio API Web ASP.NET Core o come esporre metadati Swagger con Swashbuckle o NSwag, è anche applicabile ai microservizi più avanzati implementati internamente con modelli DDD. Questa sezione è un'estensione delle sezioni precedenti, poiché la maggior parte delle procedure illustrate prima si applicano anche qui o per qualsiasi tipo di microservizio.
Questa sezione fornisce innanzitutto informazioni dettagliate sui modelli CQRS semplificati usati nell'applicazione di riferimento eShopOnContainers. Successivamente, verrà fornita una panoramica delle tecniche DDD che consentono di individuare modelli comuni riutilizzabili nelle applicazioni.
DDD è un argomento vasto con un'ampia gamma di risorse di apprendimento. È possibile iniziare da pubblicazioni come Domain-Driven Design di Eric Evans e altro materiale di Vaughn Vernon, Jimmy Nilsson, Greg Young, Udi Dahan, Jimmy Bogard e molti altri esperti di DDD/CQRS. Ma la cosa più importante è tentare di apprendere come applicare le tecniche DDD da conversazioni, lavagne e sessioni di modellazione di dominio con esperti del dominio aziendale reale.
Risorse aggiuntive
Progettazione basata su domini (DDD)
Eric Evans. Domain Language
https://domainlanguage.com/Martin Fowler. Domain-Driven Design (Progettazione basata su domini)
https://martinfowler.com/tags/domain%20driven%20design.htmlJimmy Bogard. Strengthening your domain: a primer (Rafforzamento del dominio: panoramica)
https://lostechies.com/jimmybogard/2010/02/04/strengthening-your-domain-a-primer/Webinar sulla progettazione basata su dominio distribuito
https://particular.net/webinars/ddd-design-no-nonsense-implementation-guide
Pubblicazioni sulla progettazione DDD
Eric Evans. Domain-Driven Design: Tackling Complexity in the Heart of Software (Progettazione basata su domini: gestire le complessità nel software)
https://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/Eric Evans. Domain-Driven Design Reference: Definitions and Pattern Summaries (Riferimento alla progettazione basata su domini: definizioni e riepiloghi di modello)
https://www.amazon.com/Domain-Driven-Design-Reference-Definitions-2014-09-22/dp/B01N8YB4ZO/Vaughn Vernon. Implementing Domain-Driven Design (Implementazione della progettazione basata su domini)
https://www.amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577/Vaughn Vernon. Domain-Driven Design Distilled (Progettazione basata su domini - versione sintetizzata)
https://www.amazon.com/Domain-Driven-Design-Distilled-Vaughn-Vernon/dp/0134434420/Jimmy Nilsson. Applying Domain-Driven Design and Patterns (Applicazione di progettazione e modelli basati su domini)
https://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/Cesar de la Torre. N-Layered Domain-Oriented Architecture Guide with .NET (Guida all'architettura a N livelli orientata ai domini .NET)
https://www.amazon.com/N-Layered-Domain-Oriented-Architecture-Guide-NET/dp/8493903612/Abel Avram e Floyd Marinescu. Domain-Driven Design Quickly (Progettazione basata su domini - concetti principali)
https://www.amazon.com/Domain-Driven-Design-Quickly-Abel-Avram/dp/1411609255/Scott Millett, Nick Tune - Patterns, Principles, and Practices of Domain-Driven Design (Modelli, principi e procedure della progettazione basata su domini)
https://www.wiley.com/Patterns%2C+Principles%2C+and+Practices+of+Domain+Driven+Design-p-9781118714706
Training per la progettazione DDD
- Julie Lerman e Steve Smith. Domain-Driven Design Fundamentals (Nozioni fondamentali sulla progettazione basata su domini)
https://www.pluralsight.com/courses/fundamentals-domain-driven-design