Skip to Content
01 FundamentalsIntroduction à l'Architecture Hexagonale

Introduction à l’Architecture Hexagonale

L’architecture hexagonale, également connue sous le nom de Ports & Adapters, est un pattern architectural créé par Alistair Cockburn en 2005.

Ce guide vous expliquera pourquoi et comment utiliser l’architecture hexagonale avec Micronaut.


Pourquoi “Hexagonale” ?

Le nom vient de la représentation visuelle avec un hexagone au centre (le domain) et des ports sur chaque face, permettant de connecter différents adapters.

┌─────────────────────────┐ │ Web UI │ │ (Adapter) │ └───────────┬─────────────┘ ┌──────────▼──────────┐ │ Port IN │ │ (Interface) │ ├─────────────────────┤ │ │ ┌──────────────────┐ │ DOMAIN │◄─────────┤ Port OUT │ │ (Business Logic) │ │ (Interface) │ │ │ └────────┬─────────┘ └─────────────────────┘ │ ┌───────▼──────────┐ │ Database │ │ (Adapter) │ └──────────────────┘

Le nombre de côtés n’a aucune importance ! L’idée clé est que le cœur métier (domain) est isolé et ne dépend de rien.


Problème Résolu

Pourquoi l’architecture hexagonale existe-t-elle ? Quel problème résout-elle ?

Le Problème : Couplage Fort

// ❌ Problème : couplage fort public class UserController { private UserService service = new UserService(); // Controller dépend directement du Service } public class UserService { private MySQLUserRepository repository = new MySQLUserRepository(); // Service dépend directement de MySQL // Impossible de tester sans BDD réelle ! }

Problèmes majeurs :

  • ❌ Impossible de changer de BDD sans casser le code
  • ❌ Tests difficiles (besoin d’une vraie BDD)
  • ❌ Le code métier dépend du framework
  • ❌ Couplage fort entre les couches
  • ❌ Difficile de remplacer une dépendance

Les 3 Couches

L’architecture hexagonale s’organise en 3 couches concentriques avec le domain au centre.

Domain (Cœur Métier)

C’est le centre de l’application. Il contient :

  • Entités : Les objets métier (User, Order, Product)
  • Value Objects : Objets immuables (Email, Address)
  • Ports de sortie : Interfaces définissant les besoins (UserRepository)
  • Règles métier : Logique pure (calculs, validations)
// domain/model/User.java @Value public class User { Long id; String name; Email email; public boolean isActive() { return email != null; } } // domain/port/output/UserRepository.java public interface UserRepository { Optional<User> findById(Long id); void save(User user); }

Règle d’or : Le domain ne dépend de RIEN (pas de framework, pas de BDD, pas d’API).


Principe d’Inversion de Dépendances

C’est le cœur de l’architecture hexagonale : inverser les dépendances pour découpler le code.

Le Problème

┌──────────────┐ │ Controller │ └──────┬───────┘ │ depends on ┌──────────────┐ │ Service │ └──────┬───────┘ │ depends on ┌──────────────┐ │ Repository │ ← Implémentation concrète └──────────────┘

Problème : Le haut dépend du bas → couplage fort.

  • Controller dépend de Service
  • Service dépend de Repository concret
  • Impossible de changer Repository sans casser Service
  • Impossible de tester Service sans Repository réel

Bénéfices

Indépendance du Framework

Le domain ne connaît pas Micronaut, Spring, Jakarta, etc.

// ✅ Domain pur @Value // Lombok uniquement public class User { Long id; String name; Email email; }

Avantage : Aucune dépendance framework !

Comparaison : Architecture en Couches vs Hexagonale

CritèreArchitecture en CouchesArchitecture Hexagonale
DépendancesHaut → Bas (couplage)Tout → Domain (inversion)
TestabilitéDifficile (besoin BDD/API réelles)Facile (mock des interfaces)
FlexibilitéDifficile de changer de technoFacile (juste changer l’adapter)
Complexité initialeSimplePlus de fichiers/interfaces
Maintenabilité long termeDifficile (code couplé)Excellente (séparation claire)
Indépendance frameworkNon (code lié au framework)Oui (domain pur)

Quand L’Utiliser ?

✅ Utilise l’architecture hexagonale si :

  • ✅ Ton application a une logique métier complexe
  • ✅ Tu veux changer de technologie facilement (BDD, API, framework)
  • ✅ Tu veux des tests rapides et fiables
  • ✅ L’application va évoluer sur plusieurs années
  • ✅ Plusieurs équipes travaillent sur le projet
  • ✅ Tu veux isoler la logique métier du framework
  • ✅ Le domain a des règles complexes

Exemples: E-commerce, Banking, Healthcare, Réservation complexe, SaaS multi-tenant


Résumé

L’architecture hexagonale protège votre logique métier en l’isolant de l’infrastructure technique.

PrincipeDescription
Domain au centreLe cœur métier est pur et indépendant
Inversion de dépendancesL’infrastructure dépend du domain
PortsInterfaces définissant les contrats
AdaptersImplémentations techniques des ports
TestabilitéTests rapides sans infrastructure réelle

Prochaines Étapes

Maintenant que vous comprenez les principes, explorez comment les appliquer avec Micronaut.


Ressources

Last updated on