Génération de Code DDD avec Symfony

SymfonyDDDCQRSPHP

Introduction

La conception pilotée par le métier (DDD) et la ségrégation des responsabilités de commande et de requête (CQRS) sont des approches puissantes pour structurer les applications complexes. Cependant, leur mise en place peut être fastidieuse. C’est là qu’intervient le bundle cnd/ddd-maker-bundle, qui automatise la génération des artefacts DDD dans Symfony.

ddd_layers.png source: https://www.hibit.dev/posts/15/domain-driven-design-layers

Fonctionnalités

Le bundle permet de générer rapidement :

  • Des commandes (commande),
  • Des requêtes (queries),
  • Des entités, agrégats, et objets de valeur etc..

Il s’intègre parfaitement avec Symfony Messenger pour gérer les commandes et requêtes de manière asynchrone(ou sync).

Installation

Creation du projet Symfony

composer create-project symfony/skeleton demo
cd demo
composer require webapp
composer require nelmio/cors-bundle
composer require nelmio/api-doc-bundle

Pour plus de details voir : https://symfony.com/doc/current/setup.html

Installation du bundle ddd

composer require cnd/ddd-maker-bundle --dev

Assurez-vous que le bundle est activé dans `config/bundles.php` :

```php
return [
    Cnd\DddMakerBundle\DddMakerBundle::class => ['all' => true],
];

Utilisation

Listez les commandes disponibles avec :

php bin/console list make

Génération d’une structure CQRS complète

Pour générer toutes les classes nécessaires pour une entité :

php bin/console make:ddd-full Wallet

Génération d’une commande

php bin/console make:ddd-command Wallet UpdatePhone

Fichiers créés :

  • src/Core/Application/Command/Wallet/UpdatePhone/UpdatePhoneCommand.php
  • src/Core/Application/Command/Wallet/UpdatePhone/UpdatePhoneCommandHandler.php
  • src/Core/Presentation/Controller/Wallet/UpdatePhone/UpdatePhoneController.php
  • tests/Functional/Wallet/UpdatePhone/UpdatePhoneControllerTest.php

Génération d’une requête

php bin/console make:ddd-query Wallet find phoneNumber

Fichiers créés :

  • src/Core/Application/Query/Wallet/FindByPhoneNumber/FindByPhoneNumberQuery.php
  • src/Core/Application/Query/Wallet/FindByPhoneNumber/FindByPhoneNumberQueryHandler.php
  • src/Core/Presentation/Controller/Wallet/FindByPhoneNumber/FindByPhoneNumberController.php
  • tests/Functional/Wallet/FindByPhoneNumber/FindByPhoneNumberControllerTest.php

Génération de values objects

php bin/console make:ddd-vo Wallet

Remarques

  1. Seuls les champs définis dans le constructeur sont pris en compte.
  2. Il est recommandé d’ajouter les getters et setters pour une meilleure compatibilité.

Conclusion

Le bundle cnd/ddd-maker-bundle simplifie considérablement l’implémentation de DDD et CQRS dans Symfony. Il permet aux développeurs de se concentrer sur la logique métier sans perdre de temps sur la création de fichiers répétitifs.

Pour en savoir plus, consultez la documentation.

Pour aller plus loin tu peux voir ce starter https://github.com/coundia/ddd-maker-bundler-starter

Auteur: Papa COUNDIA