Pour qui ? Ma méthode Compétences Réalisations Avis Contact

DRY or Die

Don't Repeat Yourself

Quand on parle de Laravel, on parle d’élégance, de clarté et de productivité. Mais soyons honnêtes : on a tous déjà copié-collé du code en se disant "je le refactorai plus tard"... et ce "plus tard" n’arrive jamais. Résultat ? Une base de code qui ressemble plus à un plat de spaghettis qu’à une belle architecture modulaire.

Heureusement, Laravel nous offre une panoplie d'outils pour respecter le principe DRY (Don't Repeat Yourself) et éviter de nous répéter inutilement.

Dans cet article, on va explorer les différentes approches pour appliquer DRY en Laravel, du classique Eloquent Scope jusqu’au Component Master, le gardien ultime du code non-répété.

1. Les Eloquent Scopes : DRY ta requête, DRY ta vie

Qu'est-ce qu'un Scope dans Laravel ?

Un scope est une méthode qui encapsule une logique de filtrage réutilisable pour les requêtes de base de données. Il permet de garder le code propre et organisé en évitant la répétition des mêmes conditions de filtrage un peu partout dans ton application.

Types de Scopes

Les Local Scopes sont définis directement dans un modèle Eloquent et sont parfaits pour des filtres spécifiques et récurrents à un modèle donné. Les Global Scopes, quant à eux, s’appliquent automatiquement à toutes les requêtes d’un modèle et sont utiles pour des filtres omniprésents comme les soft deletes.

User.php
class User extends Model { public function scopeAdmin($query) { return $query->where('role', 1); } } // Controller Usage $admins = User::admin()->get();
Pourquoi c'est top ? Les scopes améliorent la lisibilité, facilitent la maintenance (une seule modification impacte tout le code) et réduisent les erreurs de copier-coller.

2. Les Traits et Services : Arrête de maltraiter ton code

Trait

Qu'est-ce que c'est ?

Un mécanisme en PHP permettant de regrouper des méthodes réutilisables dans une classe. Dans Laravel, ils permettent d'ajouter des méthodes communes à plusieurs modèles ou contrôleurs sans dupliquer le code.

Idéal pour : Comportements communs (logs, notifications).

Service

Qu'est-ce que c'est ?

Une classe contenant une logique métier spécifique. Il est utilisé pour encapsuler des fonctionnalités complexes qui ne relèvent pas directement des responsabilités d'un modèle ou d'un contrôleur.

Idéal pour : Logique métier complexe et testable.

Le Verdict : Quand utiliser quoi ?

Si un trait commence à regrouper trop de fonctionnalités différentes, il est préférable de créer un service. Un service permet de séparer les responsabilités et de rendre le code plus modulaire.

En résumé : Traits = fonctionnalités simples et réutilisables. Services = logique métier structurée et centralisée.

3. Les Middlewares : DRY tes vérifications globales

Le Videur de Boîte

Il contrôle qui entre et qui reste dehors !

Qu'est-ce que c'est ?

Un middleware est une couche de logique qui s'exécute entre la réception d'une requête par le serveur et le moment où elle atteint ton application.

Pourquoi les utiliser ?

Pour gérer des tâches transversales : authentification, permissions, logs, CORS... C'est la commande php artisan make:middleware qui lance la magie.

4. Les Facades : DRY ton accès aux services

Une Facade est une interface statique vers une classe dans le conteneur de services de Laravel. Elle permet d’accéder à des services sans avoir besoin de les instancier directement.

Le Gain

Elles simplifient le code, le rendent plus lisible et fluide. Laravel gère l'injection de dépendances pour vous.

5. Les Components Blade : DRY ton HTML

Qu'est-ce qu'un Composant Blade ?

Un morceau de code HTML encapsulé dans une classe PHP. Il peut contenir du HTML, du Blade, et même de la logique PHP. Ils permettent de réutiliser facilement des éléments d'interface utilisateur.

Pourquoi les utiliser ?

Pour ne pas dupliquer le HTML dans plusieurs vues. Une modification dans le composant se propage partout. C'est le top de l'encapsulation (logique + style en un seul endroit).

Le Component Master

Évite les doublons à tout prix.

Dans une équipe, pour éviter de recréer le même composant sous 10 variations :

  • Lister tous les composants existants.
  • Valider l'utilisation avant d'en créer un nouveau.
  • Structurer intelligemment (Générique vs Spécifique).

Résultat : Maintenance simplifiée et gestion du code maîtrisée.

FAQ : Laravel DRY

Un Helper est généralement une fonction globale simple (comme dd() ou route()), tandis qu'une Facade est une interface statique donnant accès à un objet complexe du conteneur de services (comme Route::get()). Les Facades sont plus testables et orientées objet.
Non, s'ils sont bien utilisés. Ils deviennent problématiques lorsqu'ils sont utilisés pour masquer une complexité excessive ou pour créer des "God Classes". Utilisés pour partager des fonctionnalités précises et atomiques, ils sont un excellent outil DRY.
La convention Laravel exige que la méthode dans le modèle commence par scope (ex: scopeActive), mais lors de l'appel, on omet ce préfixe (ex: User::active()). Utilisez des noms clairs et explicites qui décrivent le filtre appliqué.

Partager cet article

L'oeil du CTO

" Adopter une approche DRY (Don't Repeat Yourself) dans un projet Laravel va au-delà d'une simple décision technique ; c'est une stratégie d'optimisation globale visant à assurer la scalabilité, la maintenabilité et la durabilité du produit. Pour un CTO, cela se traduit par une équipe plus performante, un code plus stable et une meilleure capacité à répondre aux besoins métiers tout en évitant l'accumulation de dette technique. "