Laravel

Architecture Laravel : ce qui tient encore après cinq ans

Retour d'expérience sur les décisions d'architecture Laravel qui vieillissent bien et celles qui coûtent cher, tirées d'applications en production.

A Azetria Agence digitale 3 min de lecture Mis à jour le 20 janvier 2026
En bref
Une architecture Laravel durable repose sur trois décisions : isoler la logique métier dans des services et des actions, accéder aux données par des contrats interchangeables, et remplacer les tableaux associatifs par des objets typés. Ces trois choix coûtent environ 15 % de temps supplémentaire au départ et divisent par trois le coût des évolutions au-delà de la deuxième année.

Nous exploitons des applications Laravel en production. Certaines ont traversé quatre versions majeures du framework sans douleur ; d’autres sont devenues difficiles à modifier au bout de dix-huit mois. La différence tient à un petit nombre de décisions prises très tôt.

Ce qui vieillit mal

La logique métier dans les contrôleurs

C’est le défaut le plus répandu et le plus coûteux. Un contrôleur de 300 lignes qui valide, calcule, écrit en base, envoie un e-mail et retourne une vue est impossible à tester autrement qu’en simulant une requête HTTP complète. Le jour où la même logique doit être appelée depuis une commande artisan ou une file d’attente, elle est copiée — et les deux copies divergent.

Les tableaux associatifs qui traversent l’application

Un tableau ['name' => ..., 'email' => ...] passé de couche en couche ne dit rien sur ce qu’il contient. Personne ne sait si phone est toujours présent, l’analyse statique ne peut rien vérifier, et une faute de frappe sur une clé se découvre en production.

Les événements utilisés comme colle universelle

Les événements Laravel sont excellents pour découpler ce qui doit l’être. Utilisés partout, ils rendent le flux d’exécution impossible à suivre : on ne sait plus ce qui se déclenche quand, ni dans quel ordre.

Ce qui tient

Isoler la logique dans des actions

Une action est une classe avec une seule méthode publique, qui fait une seule chose métier. Elle est appelable depuis un contrôleur, une commande, un job ou un test, sans adaptation.

final class SubmitContactRequestAction
{
    public function execute(ContactRequestData $data): Lead
    {
        $lead = DB::transaction(fn () => Lead::create($data->toAttributes()));

        ContactRequestReceived::dispatch($lead);

        return $lead;
    }
}

Le contrôleur se réduit alors à trois lignes : valider, appeler, répondre. Le test de la logique métier n’a plus besoin de requête HTTP.

Des objets de transfert typés

Remplacer les tableaux par des objets immuables typés apporte trois choses immédiatement : l’analyse statique détecte les erreurs de champ, l’éditeur complète les propriétés, et le contrat entre couches devient explicite.

final readonly class ContactRequestData
{
    public function __construct(
        public string $name,
        public string $email,
        public ?BudgetRange $budget,
        public string $message,
    ) {}
}

Le coût est réel : quelques dizaines de lignes par objet. Le bénéfice apparaît au premier refactoring.

Des contrats pour l’accès aux données

Injecter une interface plutôt qu’un modèle Eloquent permet de changer la source sans toucher à la logique. Sur ce site même, le blog est stocké en fichiers Markdown ; basculer vers une base de données ne demanderait de modifier qu’une ligne de liaison dans le conteneur de services.

Attention toutefois : sur une application simple sans perspective de changement de source, cette couche est du coût sans bénéfice. Le discernement fait partie du métier.

Ce qui coûte 15 % et en rapporte trois fois plus

Sur nos projets, l’application systématique de ces trois principes représente environ 15 % de temps supplémentaire pendant les premiers mois. À partir de la deuxième année, le coût d’une évolution de taille moyenne est divisé par un facteur compris entre deux et quatre — mesuré sur nos propres estimations comparées aux temps réels.

Le vrai bénéfice n’est pourtant pas là. Il est dans le fait qu’une équipe ose modifier le code. Une application qu’on n’ose plus toucher est morte, même si elle fonctionne encore.

Questions fréquentes

Rarement en totalité. Les concepts utiles — agrégats, langage partagé, frontières de contexte — s'appliquent sans imposer la structure de dossiers complète. Un DDD appliqué à la lettre sur une application de gestion de taille moyenne produit plus de cérémonie que de valeur.

Sur une application simple, oui : ils ajoutent une couche sans bénéfice. Ils deviennent utiles dès qu'une source de données peut changer, qu'un test doit être isolé de la base, ou qu'une même donnée peut venir de plusieurs origines — base, cache, API, fichiers.

Sources

A

Azetria

Agence digitale

Publications collectives de l'équipe Azetria : notes de veille, retours d'expérience de projet et synthèses méthodologiques.

  • Laravel
  • SaaS
  • IA appliquée
  • SEO

La prestation associée

Pour les entreprises dont le site doit faire plus qu'exister

Création de site web sur mesure avec Laravel

À lire ensuite

Votre projet mérite mieux qu'un devis générique

Dites-nous ce que vous voulez obtenir. Nous vous répondons avec une analyse, une fourchette et les questions que personne d'autre ne vous aura posées.

Réponse sous 4 heures ouvrées · Aucun engagement · Vos données restent chez nous