Clean Architecture

Le guide clair pour le senior dev

Philippe Escalle CTO
Software Architecture

La Clean Architecture revient souvent dans les discussions entre développeurs expérimentés… et très souvent aussi dans les entretiens d’embauche.

On en connaît le principe global, mais expliquer clairement ses couches, ses dépendances et son intérêt réel demande un peu plus de précision.

La Clean Architecture repose sur une idée simple : séparer strictement la logique métier des détails techniques. Le métier est au centre ; les technologies gravitent autour. On structure ainsi l’application en couches concentriques.

1

Entities

C’est le cœur métier, indépendant de tout. Pas de base de données, pas de framework, uniquement les règles essentielles.

2

Use Cases

Les règles applicatives. Elles orchestrent les entités et décrivent ce que le système doit faire.

3

Interface Adapters

Tout ce qui adapte les données au monde extérieur : contrôleurs, presenters, gateways…

4

Infrastructure

La périphérie. Frameworks, base de données, filesystem, providers externes.

Les dépendances sont dirigées vers le centre : le métier ne connaît rien de l’extérieur. Et c’est précisément ce qui rend l’approche stable. On peut remplacer un framework, migrer une base, changer l’UI : le domaine reste intact.

Ce que cette architecture impose, c’est de penser la logique métier avant les technologies. Pour un senior, cela force la discipline. Pour un recruteur, cela permet de distinguer un développeur qui organise son raisonnement d’un développeur qui organise seulement son code.

Principes incontournables Core Skills

Même si Clean Architecture structure les couches, plusieurs principes viennent renforcer la qualité interne du code.

SOLID

Cinq principes pour concevoir des modules fiables. SRP clarifie les responsabilités, OCP facilite les extensions, LSP garantit l’héritage, ISP évite les interfaces obèses, DIP protège le domaine.

DRY & KISS

DRY (Don't Repeat Yourself) évite les divergences. KISS (Keep It Simple, Stupid) rappelle qu'une solution lisible est toujours plus robuste qu'une implémentation complexe.

DDD (Domain-Driven Design)

Centrer le code sur le métier. Ubiquitous language, agrégats, invariants, événements… Une architecture claire ne vaut que si le domaine lui-même est bien compris et correctement modélisé.

CQRS : séparer lecture et écriture

L’architecture CQRS — Command Query Responsibility Segregation — découpe les opérations en deux modèles distincts :

  • Command : modifier l’état (create, update, delete).
  • Query : lire les données (get, list).

Pourquoi ? Parce que lecture et écriture ont souvent des contraintes différentes. La lecture demande rapidité, filtrage, optimisation. L’écriture demande cohérence et validation métier.

Avec CQRS, les deux évoluent indépendamment. Le modèle de lecture peut être dénormalisé, projeté, indexé. Le modèle d’écriture peut intégrer un vrai modèle métier riche.

Tests End-to-End : simuler l’utilisateur

Les tests E2E reproduisent le comportement d’un utilisateur réel : on vérifie que l’ensemble du système fonctionne, du front au back, jusqu’à la base.

// Scénario E-commerce type

1. User login

2. Search "Laptop"

3. Add to Cart

4. Checkout & Pay

-> Expect: "Order Confirmed" page

Les outils les plus utilisés : Cypress, Playwright, Selenium, Puppeteer. Playwright se distingue par sa performance et ses capacités d’analyse (réseau, console, traces).


Mise en pratique avec Laravel

Laravel fournit déjà une structure de base, mais rien n’empêche d’aller plus loin pour rapprocher le projet d’une Clean Architecture.

Une organisation possible

  • app/Domain

    Cœur métier, entités, value objects. Aucun Eloquent ici.

  • app/Application

    Use cases (CreateOrder, RegisterUser). Orchestration.

  • app/Infrastructure

    Implémentations concrètes (Repositories Eloquent, Mailers).

  • app/Http

    Interface adapters (Controllers, Middleware).

Dans un controller Laravel, on évite d’implémenter la logique métier directement. On injecte un use case.

Laravel Controller Injection
Injection du Use Case dans le Controller

CQRS dans Laravel

On sépare les modèles riches du domaine (écriture) des modèles de lecture plus simples et optimisés.

CQRS Separation

Optimiser les performances

La performance n’est jamais un bouton magique : c’est une méthodologie. Toute optimisation sérieuse commence par mesurer.

  • 1. Diagnostic : APM, logs, métriques. Identifier les vrais goulots (DB, CPU, I/O).
  • 2. Cache : Redis, HTTP cache, CDN. Avec une vraie stratégie de TTL.
  • 3. Asynchrone : Déporter les traitements lourds (RabbitMQ, Kafka, SQS).
  • 4. Scalabilité : Horizontal scaling, Kubernetes, gestion fine des ressources.

Les géants de la tech

Netflix

Pionnier des microservices après une panne majeure. Services autonomes et résilience extrême.

Uber

Architecture DOMA (Domain-Oriented). Plus de 1300 microservices organisés par métier.

Spotify

Organisation en "tribus" et "squads". 800+ microservices pour une autonomie totale des équipes.

Amazon

La règle des "Two-pizza teams". Petites équipes responsables de leur périmètre de bout en bout.

Sam Newman rappelle un principe fondamental : commencer simple. Les microservices — et par extension les architectures très découpées — doivent être une évolution, pas un point de départ.

L'oeil du CTO

" Pour un développeur senior comme pour un CTO, maîtriser ces concepts n’est plus un atout : c’est une base. Clean Architecture apporte la stabilité, CQRS apporte la clarté, les tests E2E garantissent le bon fonctionnement réel, et l’optimisation continue permet à l’application de garder de bonnes performances en production. Ces approches sont demandées en entretien pour une raison simple : elles révèlent la capacité à structurer, prévoir, diagnostiquer et faire évoluer un système complet. Un développeur qui les comprend et sait les expliquer démontre un sens architectural mature et directement utile en entreprise. "

Philippe Escalle — version IA