Architecture.NETFEATURED

Architecture hexagonale avec .NET 8 et MediatR

Comment structurer un projet .NET pour maximiser la testabilite et decoupler la logique metier de l'infrastructure.

12 mars 2026
8 min
2406 vues

Introduction

L'architecture hexagonale (aussi connue sous le nom de Ports & Adapters) est un pattern architectural qui place la logique métier au centre de l'application, isolée des détails techniques comme les bases de données, les APIs ou les frameworks.

Pourquoi l'architecture hexagonale ?

Dans un projet .NET classique, la logique métier est souvent couplée à Entity Framework, aux contrôleurs ASP.NET ou à d'autres dépendances d'infrastructure. L'architecture hexagonale résout ce problème en inversant les dépendances.

Les avantages

  • Testabilité maximale — la logique métier peut être testée sans base de données
  • Découplage — changer de base de données ou de framework UI ne touche pas au domaine
  • Clarté — chaque couche a une responsabilité clairement définie

Implémentation avec MediatR

MediatR nous permet d'implémenter le pattern CQRS (Command Query Responsibility Segregation) de manière élégante dans .NET 8.

public record CreateOrderCommand(string CustomerId, List<OrderItem> Items) : IRequest<OrderResult>;

public class CreateOrderHandler : IRequestHandler<CreateOrderCommand, OrderResult>
{
    private readonly IOrderRepository _orders;
    
    public CreateOrderHandler(IOrderRepository orders)
    {
        _orders = orders;
    }
    
    public async Task<OrderResult> Handle(CreateOrderCommand request, CancellationToken ct)
    {
        var order = Order.Create(request.CustomerId, request.Items);
        await _orders.SaveAsync(order, ct);
        return new OrderResult(order.Id);
    }
}

Structure du projet

Voici la structure recommandée pour un projet .NET 8 avec architecture hexagonale :

Le domaine ne dépend de rien. L'infrastructure dépend du domaine. L'application orchestre le tout.

Conclusion

L'architecture hexagonale, combinée avec MediatR et .NET 8, offre une base solide pour des applications maintenables et testables à long terme.