5 meilleurs outils pour la conception pilotée par domaine
En tant que développeurs, nous souhaitons souvent créer des systèmes logiciels alignés sur le modèle de domaine et répondant aux exigences de l'entreprise. C'est là que DDD entre en jeu.
La conception pilotée par le domaine (DDD) est une méthodologie de développement de systèmes logiciels qui met fortement l'accent sur l'alignement du modèle de domaine avec la mise en œuvre. En se concentrant sur le domaine du problème et en créant une compréhension partagée des concepts et des relations pertinents, les développeurs peuvent créer des logiciels qui reflètent mieux les besoins des parties prenantes et sont plus adaptables aux exigences commerciales changeantes.
Pour prendre en charge DDD, les développeurs peuvent utiliser une variété d'outils et de technologies qui facilitent des tâches telles que la modélisation de domaine, le mappage de données et les tests. Dans cet article, nous allons explorer certains des meilleurs outils et frameworks disponibles pour prendre en charge DDD. De l'approvisionnement en événements et du CQRS aux outils de modélisation de domaine et aux cadres ORM, nous couvrirons une gamme d'outils et soulignerons leurs principaux avantages et cas d'utilisation. Donc, que vous soyez nouveau sur DDD ou un praticien expérimenté, lisez la suite pour découvrir les meilleurs outils pour créer des systèmes logiciels pilotés par domaine.
Qu'est-ce que le modèle de domaine et comment pouvons-nous l'utiliser ?
Achetez d'abord, si vous êtes nouveau sur DD, abordons rapidement l'éléphant rose dans la pièce : qu'est-ce que le « modèle de domaine » ?
Le modèle de domaine est un concept central dans la conception pilotée par le domaine (DDD) et représente le cœur d'un système logiciel. Il s'agit d'un modèle conceptuel du domaine du monde réel que le système logiciel est censé traiter, et il définit la structure des données et le comportement du système. Le modèle de domaine est une compréhension partagée du domaine du problème entre toutes les parties prenantes, y compris les experts métier, les développeurs et les utilisateurs.
Ce modèle se compose de :
- Entités, qui sont des objets avec des identités uniques qui ont un cycle de vie.
- Les agrégats, qui sont des clusters d'objets associés qui forment une limite de cohérence transactionnelle.
- Les objets de valeur sont des objets qui n'ont pas d'identité unique et sont définis par leurs propriétés.
- Les services de domaine sont des opérations ou des algorithmes qui ne sont spécifiques à aucune entité ou objet de valeur unique.
Prenons un exemple
J'aime toujours utiliser des exemples pratiques pour comprendre des concepts complexes, alors disons que nous construisons une plate-forme de commerce électronique, et l'une des exigences est de permettre aux utilisateurs de passer des commandes de produits.
Dans la conception axée sur le domaine, nous commençons par créer un modèle de domaine qui représente les concepts et relations pertinents dans le domaine du problème.
L'une des entités clés de ce domaine est l'entité Commande, qui représente une commande individuelle passée par un utilisateur. L'entité Order aurait des propriétés telles qu'un OrderID , un CustomerID , une liste de produits commandés , un prix total et un statut (par exemple, en attente, rempli, annulé).
Une autre entité de ce domaine peut être l'entité Produit, qui représente un produit disponible à l'achat. L' entité Product peut avoir des propriétés telles qu'un ProductID , un nom , une description , une image , un prix et une liste de catégories .
Les agrégats sont des clusters d'objets associés qui forment une limite de cohérence transactionnelle. Nous pouvons donc créer un agrégat Order qui inclut l'entité Order, ainsi que des entités associées telles que l'entité Product et l'entité Customer. Cela permettrait de s'assurer que toute modification apportée à ces entités est effectuée d'une manière cohérente sur le plan transactionnel.
Nous pouvons également créer des objets de valeur pour représenter des concepts tels que les adresses de livraison et les adresses de facturation, qui n'ont pas d'identités uniques mais sont définies par leurs propriétés.
Enfin, nous pourrions créer des services de domaine comme un ShippingService, qui serait responsable du calcul des frais d'expédition et de la mise à jour de l'entité Order avec les informations d'expédition appropriées.
Dans l'ensemble, ce modèle de domaine nous aide à comprendre les concepts et les relations clés dans le domaine du problème et fournit une base pour la mise en œuvre de la plate-forme de commerce électronique. En alignant la mise en œuvre sur le modèle de domaine, nous pouvons créer un système plus flexible, maintenable et réactif à l'évolution des besoins de l'entreprise.
Examinons maintenant quelques outils qui pourraient nous aider à faire exactement cela.
Event Sourcing — le Saint Graal de DDD
L'approvisionnement en événements est une technique utilisée pour implémenter des concepts DDD tels que des agrégats, des entités et des objets de valeur. Avec l'approvisionnement en événements, nous stockons toutes les modifications apportées au système sous la forme d'une séquence d'événements, au lieu de simplement stocker l'état actuel du système. Ce faisant, nous pouvons reconstruire l'état du système à tout moment, ce qui est incroyablement puissant. C'est comme avoir une machine à remonter le temps pour votre logiciel !
Continuons avec notre exemple de plateforme e-commerce.
Supposons que nous souhaitions suivre les modifications apportées à notre entité Order au fil du temps. Avec le sourcing d'événements, au lieu de mettre à jour directement l'entité Commande, nous créons une série d'événements qui représentent les changements d'état de la Commande. Chaque événement représente une modification discrète de l'état de l'entité Commande et est stocké dans un journal des événements.
Par exemple, supposons qu'un utilisateur passe une commande pour un produit. Au lieu de mettre à jour directement l'entité Order avec les nouveaux détails de la commande, nous créons un événement OrderPlaced qui inclut OrderID, CustomerID, la liste des produits commandés et le prix total. Nous ajoutons ensuite cet événement au journal des événements.
Plus tard, si l'utilisateur met à jour sa commande en ajoutant ou en supprimant des produits, nous créons un événement OrderUpdated qui inclut l'ID de commande et la liste de produits mise à jour, et l'ajoutons au journal des événements. Si la commande est annulée, nous créons un événement OrderCanceled qui inclut l'ID de commande et la raison de l'annulation, et l'ajoutons au journal des événements.
En utilisant l'approvisionnement en événements, nous pouvons recréer l'état de l'entité Commande à tout moment en rejouant les événements dans le journal des événements. Nous pouvons également utiliser le journal des événements pour auditer les modifications apportées à l'entité Commande et créer des rapports qui affichent l'historique de la commande.
En utilisant l'approvisionnement en événements pour capturer les changements d'état de ces objets, nous pouvons nous assurer que notre implémentation logicielle reste alignée sur le modèle de domaine.
Par exemple, disons que notre commande est en fait un agrégat, qui se compose d'une ou plusieurs entités OrderLine et d'un objet de valeur ShippingAddress. En utilisant le sourcing d'événements, nous pouvons capturer chaque changement d'état de l'agrégat Order sous la forme d'une série d'événements, tels que OrderPlaced, OrderUpdated et OrderCanceled. Ces événements peuvent ensuite être utilisés pour recréer l'état de l'agrégat Order à tout moment, garantissant que notre implémentation logicielle reflète avec précision le modèle de domaine.
Avec Bit , vous pouvez créer un composant qui encapsule l'implémentation de la source d'événements, y compris le magasin d'événements, les gestionnaires d'événements et d'autres composants pertinents. Ce bit peut ensuite être partagé avec d'autres équipes, qui peuvent facilement le réutiliser dans leurs propres projets. En utilisant Bit pour cela, vous pouvez vous assurer que la mise en œuvre est cohérente entre les différents projets et équipes. Cela peut être particulièrement utile dans les grandes organisations avec plusieurs équipes de développement travaillant sur différents projets.
CQRS - Quand une taille ne convient pas à tous
CQRS (Command Query Responsibility Segregation) est un modèle utilisé pour séparer les opérations de lecture et d'écriture dans un système. Dans les architectures traditionnelles, nous avons un modèle unique qui gère à la fois les lectures et les écritures, ce qui peut entraîner des problèmes de performances et des problèmes d'évolutivité. CQRS résout ce problème en séparant les modèles de lecture et d'écriture, ce qui nous permet d'optimiser chaque modèle indépendamment.
Pour prendre en charge CQRS, plusieurs frameworks sont disponibles. L'un de ces frameworks est NestJS. NestJS réalise CQRS en utilisant son bus d'événements intégré, qui vous permet de publier et de vous abonner à des événements dans différentes parties de votre application. Cela facilite l'implémentation d'un gestionnaire de commandes qui écrit dans la base de données de votre application, ainsi qu'un gestionnaire de requêtes qui récupère les données de la base de données et les renvoie au client.
En séparant ces deux responsabilités, vous pouvez vous assurer que votre application est plus performante, plus facile à tester et plus résistante au changement.
L'utilisation de NestJS avec Bit peut encore améliorer votre capacité à développer des applications DDD. Bit fournit un moyen de partager et de réutiliser des composants de code dans différents projets ( lisez cet article pour en savoir plus à ce sujet), permettant aux équipes de collaborer plus efficacement et d'éviter la duplication des efforts. En créant une bibliothèque partagée de composants NestJS, tels que des gestionnaires de commandes et de requêtes, vous pouvez réduire la quantité de code que vous devez écrire et gérer dans votre portefeuille d'applications. De plus, Bit vous permet de versionner et de suivre les modifications apportées à vos composants au fil du temps, ce qui facilite la gestion des dépendances et garantit la compatibilité entre vos applications.
Outils de modélisation de domaine — Visualisez votre modèle de domaine
Ah, les outils de modélisation de domaine. Si vous aimez la conception pilotée par le domaine (DDD), vous les connaissez probablement. Si ce n'est pas le cas, pas de soucis, je suis là pour vous aider à vous mettre à niveau.
Alors, que sont les outils de modélisation de domaine ? En un mot, ce sont des applications logicielles qui aident les développeurs à créer et à visualiser le modèle de domaine de leur système logiciel. Le modèle de domaine est une représentation des concepts et des relations du monde réel que le système logiciel est conçu pour modéliser. C'est une partie essentielle de DDD, qui met l'accent sur l'importance d'une compréhension claire, concise et partagée du modèle de domaine entre toutes les parties prenantes.
Il existe divers outils de modélisation de domaine disponibles qui peuvent vous aider à créer et à visualiser des modèles de domaine pour vos systèmes logiciels. Ces outils peuvent être particulièrement utiles lorsque vous travaillez avec des experts du domaine et d'autres membres de l'équipe pour vous assurer que le modèle de domaine est précis et bien compris.
Un exemple d'un tel outil est PlantUML , qui est un outil de création de diagrammes textuel qui vous permet de créer des diagrammes UML, y compris des diagrammes de classes, des diagrammes de séquence, des diagrammes de cas d'utilisation, etc., à l'aide d'une syntaxe simple. PlantUML est open source et prend en charge plusieurs formats de sortie, notamment PNG, SVG et PDF. Il peut être intégré à divers éditeurs et IDE, y compris Visual Studio Code, via des extensions ou des plugins.
Un autre outil populaire est Lucidchart , qui est un outil de création de diagrammes basé sur le Web qui vous permet de créer différents types de diagrammes, notamment des organigrammes, des diagrammes UML, des diagrammes ER, etc., à l'aide d'une interface glisser-déposer. Lucidchart propose une gamme de modèles et de formes, ce qui facilite la création rapide de diagrammes d'aspect professionnel.
De plus, certains éditeurs de code et IDE, tels qu'IntelliJ IDEA, fournissent une prise en charge intégrée des diagrammes UML et d'autres outils de modélisation visuelle, ce qui peut être utile lorsque vous travaillez sur des systèmes logiciels qui ont des modèles de domaine complexes.
Dans l'ensemble, les outils de modélisation de domaine peuvent être un atout précieux lorsque vous travaillez sur des systèmes logiciels qui impliquent des modèles de domaine complexes. Ils peuvent vous aider à créer, visualiser et communiquer efficacement le modèle de domaine avec les autres membres de l'équipe, ce qui facilite la création de systèmes logiciels conformes aux exigences de l'entreprise.
Cadres ORM (Object-Relational Mapping)
L'un des principaux défis de la mise en œuvre de DDD consiste à mapper des objets sur des bases de données relationnelles. C'est là que les cadres ORM sont utiles. Les frameworks ORM permettent de mapper des objets sur des tables dans une base de données relationnelle. Cela vous permet de travailler avec des objets dans votre code, tandis que le framework s'occupe des interactions avec la base de données.
Il existe de nombreux frameworks ORM communs pour tous les langages. Pour l'écosystème JavaScript, comme il ne pouvait en être autrement, vous avez le choix parmi des tonnes. Cela dit, certaines des options les plus populaires sont Sequelize et Prisma . Ces cadres fournissent un moyen de mapper des objets à des tables dans une base de données, et ils fournissent également un moyen d'interroger la base de données à l'aide d'une syntaxe orientée objet.
L'un des avantages de l'utilisation des frameworks ORM est qu'ils réduisent la quantité de code passe-partout que vous devez écrire. Ils facilitent également la modification du schéma de base de données sous-jacent sans avoir à modifier votre code.
Cependant, les frameworks ORM peuvent également introduire une surcharge de performances et rendre difficile l'exécution de requêtes complexes (telles que des JOIN complexes et des sous-requêtes), il est donc important de choisir le bon framework pour votre application.
En plus de tous les avantages que les ORM ajoutent, Bit ajoute encore plus de valeur en vous permettant de réutiliser des modèles de données et du code générique dans plusieurs projets qui partagent facilement des structures de données. Par exemple, vous pouvez créer un composant ORM qui définit un modèle de données spécifique, puis le réutiliser dans différentes parties de votre application. Cela peut vous faire gagner du temps et des efforts, car vous n'avez pas besoin d'écrire le même code plusieurs fois. De plus, comme Bit vous permet de gérer et de versionner facilement vos composants, vous pouvez vous assurer que tous vos composants sont à jour et correspondent à la version actuelle de votre structure de données.
tu as aimé ce que tu as lu? Envisagez de vous abonner à ma newsletter GRATUITE où je partage avec tout le monde mes 2 décennies de sagesse dans l'industrie informatique. Rejoignez « La randonnée d'un ancien développeur » !
Cadres de test
Lorsqu'il s'agit de tester dans Domain-Driven Design (DDD), il est important de s'assurer que votre modèle de domaine est correct et se comporte comme prévu. C'est là qu'interviennent les frameworks de test. Vos tests doivent en quelque sorte décrire le modèle de domaine pour garantir que la logique finale de votre logiciel répond aux attentes.
Il existe de nombreux frameworks de test disponibles pour JavaScript, chacun avec ses propres forces et faiblesses.
Deux frameworks de test très populaires pour JavaScript sont Jest et Mocha.
Jest est un framework de test JavaScript construit par Facebook. Il fournit une API de test simple et intuitive, ce qui facilite l'écriture de tests pour votre code JavaScript. Jest fournit également des fonctionnalités telles que les tests de moquerie et d'instantané, qui peuvent vous aider à écrire des tests plus efficaces et efficaces.
Mocha est un framework de test JavaScript qui vous permet d'écrire des tests dans le style que vous préférez. Il fournit une API flexible qui peut être utilisée pour tester le code synchrone et asynchrone. Mocha prend également en charge plusieurs formats de rapport, ce qui facilite l'intégration avec d'autres outils dans votre flux de travail de test.
L'utilisation d'un framework de test comme Jest ou Mocha peut vous aider à détecter les bogues et à vous assurer que votre modèle de domaine se comporte comme prévu. Cependant, configurer vos tests et vous assurer de toujours les exécuter peut prendre du temps et être fastidieux. C'est là que Bit peut vous aider.
Bit génère automatiquement un modèle de test pour chaque composant que vous créez. Non seulement cela, mais l'étape de test est obligatoire dans tous ses processus principaux (tels que le balisage et la construction des composants), donc même si vous ne le souhaitez pas, vous devez écrire les tests pour vous assurer que les composants peuvent être poussés et partagé avec d'autres développeurs. En plus de tout cela, la configuration de Jest (ou de vos frameworks de test souhaités) est effectuée automatiquement par Bit, vous n'avez donc pas vraiment à vous soucier de cette étape non plus.
En conclusion, l'utilisation d'un cadre de test est cruciale lors du développement d'applications utilisant les principes de conception pilotée par domaine (DDD). Jest et Mocha sont deux choix populaires pour tester les applications JavaScript, et l'utilisation de Bit peut vous aider à rationaliser votre processus de test. Cela peut vous faire économiser du temps et des efforts et garantir que vos tests sont à jour et fonctionnent correctement.
En résumé, la conception pilotée par domaine (DDD) est une méthodologie puissante pour développer des systèmes logiciels qui se concentre sur l'alignement du modèle de domaine avec la mise en œuvre. Pour prendre en charge DDD, vous pouvez utiliser une variété d'outils et de technologies, y compris l'approvisionnement en événements, CQRS, les outils de modélisation de domaine, les cadres ORM et les cadres de test.
Et en plus de cela, Bit permet aux équipes de créer et de partager des composants qui encapsulent des fonctionnalités métier spécifiques, ce qui est essentiel pour créer et maintenir des applications complexes qui reposent sur DDD. Les composants peuvent être utilisés pour créer des modèles de domaine, s'intégrer à des bases de données et exécuter une logique métier complexe.
Ainsi, que vous débutiez avec DDD ou que vous soyez un professionnel chevronné, ces outils et technologies peuvent vous aider à créer de meilleures applications logicielles qui correspondent aux besoins de votre entreprise.
Alors allez-y, essayez-les et voyez ce qui vous convient le mieux!