[Laravel] Architecture Modulaire avec Laravel Module

Récemment, nous avons travaillé sur un nouveau projet qui nous a été confié : développer des fonctionnalités pour une application Laravel existante. Ce projet utilise un package Laravel appelé « Laravel Module ». Au fil de notre collaboration sur cette application, nous avons rapidement constaté les avantages de ce package : une meilleure lisibilité et une séparation plus nette du code, rendant ainsi l’application plus agréable à maintenir et à améliorer. Nous avons décidé de partager notre expérience en abordant le concept d’architecture modulaire et l’outil Laravel Module.

Problème de l’architecture par défaut de Laravel

Si Laravel offre une architecture de dossier efficace pour les projets de petite et moyenne envergure, la gestion devient plus complexe lorsque le projet s’étend et implique de multiples aspects métier. Voici les principaux défis rencontrés :

  • La navigation entre les fichiers devient ardue, rendant difficile la localisation de la logique métier.
  • L’identification des fonctionnalités spécifiques du projet devient floue avec une architecture de plus en plus complexe.
  • La maintenabilité et la compréhension du code s’en trouvent compromises, affectant la productivité des développeurs.

Comme l’a si bien souligné Addy Osmani :

Un bon code est comme une lettre d’amour destinée au prochain développeur qui va le maintenir.

Addy Ousmani

Il est donc essentiel de veiller à la lisibilité et à la clarté du code !

Architecture modulaire

Pour pallier aux problèmes de l’architecture basique de Laravel, nous préconisons l’adoption d’une approche modulaire. Le principe est simple : découper et regrouper les fichiers du projet selon des aspects logiques métier.

Voici un exemple d’architecture par défaut d’un projet.

L'architecture Laravel de l'application se compose de trois principaux dossiers : Controller, Model et Service.

Dans le dossier Controller, nous retrouvons plusieurs fichiers qui contrôlent le flux de l'application : UserController, ClientController, ProduitController, DevisController et BillingController.

Le dossier Model contient les définitions des différentes entités de l'application : User, Entreprise, Produit, Devis et Billing.

Enfin, le dossier Service regroupe les fichiers dédiés aux services et aux opérations métier de l'application. Il comprend des fichiers de service pour les utilisateurs, les clients, les produits et la facturation.
Schéma d’architecture par défaut de Laravel

Nous pouvons identifier trois besoins métier : la gestion des utilisateurs, des clients, des devis/facturation.

chaque module est contenu dans le dossier "Modules", avec ses propres dossiers pour les Controllers, Models et Services.
Schéma d’architecture modulaire

Cette architecture comporte plusieurs avantages :

  • Amélioration de la lisibilité, de la maintenabilité et de la testabilité du code.
  • Possibilité de réutiliser les modules dans d’autres projets, favorisant ainsi l’efficacité du développement.
  • Scalabilité du projet, permettant l’ajout de nouveaux modules au fur et à mesure de l’évolution des besoins métier.
  • Isolation des erreurs, facilitant ainsi le processus de débogage et de correction des problèmes.

Mettre en place simplement

Avec Laravel il est possible de mettre en place simplement l’architecture modulaire notamment grâce au package nwidart/laravel-modules. C’est un outil largement utilisé dans la communauté Laravel, offrant une gestion efficace des modules au sein de votre application. Avec des fonctionnalités telles que la prise en charge des tests et la possibilité de désactiver ou activer des modules selon les besoins, ce package facilite grandement la structuration de votre projet et permet de gérer l’architecture modulaire simplement.

Conclusion

En adoptant une architecture modulaire avec le package Laravel Module, vous pouvez améliorer la lisibilité, la maintenabilité et la scalabilité de votre application Laravel, tout en facilitant la gestion des différents aspects métier. N’hésitez pas à explorer cette solution pour optimiser vos projets !

Pour des solutions personnalisées ou un ajout de fonctionnalités sur des solutions existante. Faites confiance à Unsolite pour s’adapter à vos besoin. Pour en savoir plus, contactez-nous.