Skip to content

Instantly share code, notes, and snippets.

@tjaskula
Last active February 16, 2019 16:09
Show Gist options
  • Save tjaskula/1441833a772ee02c7948fac791f4392c to your computer and use it in GitHub Desktop.
Save tjaskula/1441833a772ee02c7948fac791f4392c to your computer and use it in GitHub Desktop.
Implementing Domain Driven Design

Translated from : https://www.idddworkshop.com

Implementer Domain Driven Design

Cours développé par Vaughn Vernon et enseigné par Tomasz Jaskula

Comment votre équipe peut mettre à profit DDD

3 jours intensifs avec mise en pratique de IDDD Workshop conçu par Vaughn Vernon

Allez au-delà de la théorie de DDD et apprenez comment votre équipe peut réellement utiliser DDD afin de prendre avantage des initiatives stratégiques et donner l’avantage concurrentiel à votre entreprise. L'accent est mis sur le développement de logiciels avec les pratiques du software craftsmanship, en plaçant au coeur du code source une conception de logiciels dans le respect des processus agiles, et ainsi éviter les tentatives qui visent à résoudre de véritables problèmes stratégiques de l'entreprise uniquement avec une approche technologique. Cet atelier conviendra particulièrement aux développeurs et architectes de logiciels de niveau intermédiaire et senior, qui s’intéressent à la conception de logiciels et à la conception de modèles de domaine à l’aide de l’approche Domain-Driven Design (DDD). Si votre organisation cherche à investir dans les architectures basées sur les Microservices, considérez cet atelier comme une base essentielle. C'est un atelier pratique. Les participants sont fortement encouragés à participer aux divers exercices et à écrire du code source incluant la mise en œuvre de plusieurs Microservices interagissant ensemble en tant que Contextes Bornés (Bounded Contexts) DDD intégrés à l'aides des Evènements. Vous utiliserez la conception stratégique et tactique de DDD dans vos implementations.

Jour 1

Prise en main, la conception stratégique et l'architecture

L'objectif de la première journée est de vous familiariser avec la mentalité DDD qui vous libérera des approches de modélisation orientée données. Cela est nécessaire pour saisir l’intérêt de développer un Langage Omniprésent (Ubiquitous Language, UL) dans un Contexte Borné (Bounded Context, BC), marque de fabrique de DDD. À partir de là, vous serez prêt à adopter une conception stratégique utilisant des Sous-Domaines, des Contextes Bornés (Bounded Contexts, BC) et des Cartes de Contexte (Context Map, CM). La suite du premier jour est ensuite consacrée à l'architecture, vous préparant à utiliser les architectures telles que Ports et Adaptateurs, Event-Driven et d'autres outils architecturaux puissant lors du développement de nouveaux Contextes Bornés (Bounded Contexts, BC) dans les exercices pratiques en classe. Les participants apprendrons à développer un Language Omniprésent (Ubiquitous Language, UL) dans un Contexte Borné (Bounded Context, BC) en utilisant à la fois les outils comme Specification by Exemple et Event Storming. Utilisez Impact Mapping pour définir les objectifs de livraison logicielle. Les participants divisés en équipes utiliseront ces outils pour parvenir à une compréhension partagée d'un domaine principal et de sous-domaines. Chaque équipe présentera sa "vision d'ensemble" et son travail de conception et recevra des commentaires utiles avant la mise en œuvre effective, qui débutera le deuxième jour.

Prise en main du DDD

Comprendre l'essence de DDD. Construire la bonne mentalité afin de maîtriser une modélisation logicielle puissante. Développer un Langage Omniprésent (Ubiquitous Language, UL) pour votre projet à l'aide de l'approche Spécification by Exemple et des tests d'acceptation. Ce sont des bases nécessaires pour aller plus loin avec DDD.

Domaines, Sous-domaines, et Contextes Bornés (Bounded Contexts)

Saisir et utiliser les concepts de base de modélisation stratégique DDD. Apprendre à distinguer les concepts pertinents des concepts non pertinents. Découvrir pourquoi la conception stratégique est si essentielle. Développer la capacité à déterminer quand les modèles de domaine sont construits correctement et quand ils ont besoin d'une conception plus rigoureuse.

Cartographie de Context (Context Mapping)

Apprendre comment intégrer différents sous-systèmes à l'aide de DDD et d'autres techniques simples de conception logicielle. Cartes de Contexte (Context Maps, CM) ne sont pas que des dessins. Utilisez-les pour améliorer les communications entre les équipes, la réflexion sur les projets, l'apprentissage, la planification et comme l'outil d'intégration.

Architectures favorables à DDD

Découvrir comment divers styles et modèles d'architecture peuvent être utilisés pour soutenir vos projets DDD. Nous examinerons les éléments suivants: Architecture par couches; Principe d'inversion de dépendance; Architecture Hexagonale; Les Microservices; REST; Event-Driven; Process Management; Event Sourcing et CQRS; Modèle Acteur. Ces styles et modèles d'architecture utilisés en même temps avec DDD, vous aideront dans vos efforts de la mise en place de l'architecture Microservices.

Les Evènements de domaine et Event Storming

Apprendre à utiliser les événements de domaine et Event Storming à la fois pour modéliser une "vision d'ensemble" de systèmes et pour concevoir les modèles tactiques détaillés. Ces exercices constitueront une base nécessaire pour mettre en application l’architecture orientée Evènement lors du deuxième jour.

Jour 2

Modélisation Tactique

Au cours de la deuxième journée, nous nous concentrerons sur la conception tactique, ce qui vous donnera l'aptitude à prendre au sein d'un domaine principal, des décisions de modélisation plus fines et plus précises . Qu'il s'agisse d'utiliser des outils tactiques, qui conviennent le mieux à votre problématique de modélisation, tels que des Entités, des Objets de Valeur, des Agrégats, des Evénements de Domaine ou des Services de Domaine, vous pourriez les utiliser dans votre propre projet de modélisation du domaine principal. Au fur et à mesure que la journée avance, vous apprendrez les avantages de l'utilisation de chacun des outils et de savoir reconnaître une situation ou l'utilisation d'un autre outil serait un meilleur compromis.

Les Entités

Il y aura probablement au moins quelques Entités dans les modèles de domaine orientés objet car il est nécessaire de gérer les changements d'état tout au long du cycle de vie des objets mutables. Vous allez apprendre comment utiliser correctement les Entités comme un outil de modélisation nécessaire, mais aussi comprendre pourquoi vous devriez les utiliser moins souvent que vous ne le pensez. Apprendre à utiliser les Entités au mieux lorsqu'un concept de domaine doit évoluer dans le temps, plutôt que de l'utiliser comme un outil de modélisation par défaut.

Les Objets de Valeur

Adopter cet outil de modélisation inestimable et fonctionnel que vous devriez utiliser aussi souvent que possible. Vous apprendrez les caractéristiques de l'Objet de Valeur et pourquoi l'utilisation dans la mesure du possible de Valeurs est un moyen de modélisation plus sûr. Vous apprendrez la modélisant des concepts en tant que Valeurs et vous verrez les avantages d'utiliser modèles riches basés sur les Valeurs plutôt que sur les Entités.

Les Agrégats

Démystifier la modélisation des Agrégats efficaces en s'aidant d'un ensemble de règles simples. Apprendre à concevoir des grappes d’objets pour avoir une cohérence transactionnelle correcte, des performances et une évolutivité élevées.

Les Evénements de Domaine

Apprendre à modéliser, publier et utiliser "les faits" qui se sont passés dans un modèle de domaine. Vous verrez comment les Evénements de Domaine ont un impact considérable sur vos modèles au sein de l'entreprise. Vous comprendrez comment publier et utiliser des Evénements à l'aide de la messagerie.

Services de Domaine

Ajouter à votre modèle des opérations puissantes qui n'ont pas d'état lorsque leur utilisation est appropriée. Les techniques de modélisation couvrent à la fois des services spécifiques à un domaine et ceux de nature plus technique, souvent utilisés pour l'intégration.

Les Modules

Comprendre l’importance des techniques d’organisation des concepts dans un modèle de domaine ainsi que les techniques associées. Pourquoi se donner la peine de créer des objets de domaine avec soin, mais sans la modularisation appropriée en utilisant le Langage Omniprésent (UL)?

Fabriques

Découvrir quand et comment utiliser des fabriques pour prendre en charge la création d'objets de domaine.

Jour 3

Persistance des Agrégats, Intégration des Contextes Bornés (Bounded Contexts), Application

Au cours de la troisième journée, nous rassemblerons toutes les parties pour créer une application complète. Nous examinerons les différentes manières de persister les Agrégats à l'aide de l'ORM (Mappeur objet-relationnel), les bases de documents, les bases de clés-valeurs, ainsi qu'à l'aide de l’utilisation de Event Sourcing. Nous aborderons ensuite de manière approfondie, l'application des techniques de Cartographie de Contextes (Context Mapping) lorsque nous reviendrons à la modélisation stratégique, mais cette fois-ci en développant des solutions d'intégration entre les Domaines Principaux et d'autres Contextes Bornés (Bounded Contexts) dans le système entier. Enfin, nous nous intéressons aux autres parties de l’application, telles que l’interface utilisateur et les requêtes avec CQRS. Nous examinerons également comment utiliser les Services d'Applications lorsque cela sera nécessaire. Avec toute cette expérience, vous serez mieux préparés pour aller de l'avant avec votre propre projet DDD ou pour faire davantage de progrès dans votre initiative stratégique DDD actuelle.

Entrepôts (Repositories) et Event Sourcing

Considérer deux approches principales pour la persistance et la reconstitution de vos objets de domaine. Vous apprendrez à persister et à récupérer vos Agrégats à l'aide de bases de données SQL et NoSQL. Vous apprendrez également à utiliser Event Sourcing à la fois comme approche de persistance et à publier des Evénements de Domaine pour une consommation plus large.

Contextes Bornés (Bounded Contexts) intégrés

Utiliser REST et le middelware de messagerie pour réaliser vos Cartes de Context (Context Maps) dans le code lorsque vous intégrez plusieurs Contextes Bornés (Bounded Contexts) d'applications d'entreprise. Comprendre les complexités et les défis des environnements distribués et comment les gérer. Une leçon importante à souligner est de modéliser chaque Contexte Borné (Bounded Context) de manière nette et distincte de ceux avec lesquels vous vous intégrez.

Application

Découvrir comment les composants qui entourent votre modèle de domaine constituent une application de sous-système complète. Une attention particulière est accordée aux stratégies d'interface utilisateur et à l'interface de programmation d'application (API) utilisant Application Services. Ici, vous apprendrez comment appliquer CQRS à partir d'Evénements de Domaine et d'Event Sourcing.

Apprendre à vous intégrer à d'autres sous-systèmes à l'aide de DDD et de techniques de conception simples. Cartes de Contexte (Context Maps) ne sont pas que des dessins. Utilisez-les pour la communication entre les équipes, la réflexion sur les projets, l'apprentissage, la planification et comme outil d'intégration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment