Logo CJiwan
CJiwan

Un moteur de planification sans base de données : le chemin critique dans ProjectsManager

Comment ProjectsManager calcule dates au plus tôt, dates au plus tard et chemin critique en Domain pur, testable sans EF Core ni navigateur.

Publié le 19 septembre 2026
7 minutes de lecture

ProjectsManager est une plateforme de gestion de projet (WBS, dépendances entre tâches, planification, temps passé, reporting) construite en .NET Blazor Server. Ce qui m'intéresse ici n'est pas la liste des fonctionnalités, mais un choix d'architecture précis : le moteur de planification ne connaît ni base de données, ni framework web. Il vit entièrement dans la couche Domain, sous forme de fonctions pures.

Le découpage en couches

Le projet suit une Clean Architecture à quatre couches, où le sens des dépendances est vérifiable directement dans les fichiers .csproj.

ProjectsManager.Domain ne dépend d'aucun package NuGet métier : pas d'Entity Framework, pas d'ASP.NET, pas de Blazor. Rien que du C# et du System. C'est ce qui permet d'écrire des tests unitaires sur la logique de planification sans monter de base de données ni de serveur.

Le vrai morceau : l'ordonnanceur par chemin critique

La partie la plus dense du projet est ProjectScheduler, qui implémente la méthode du chemin critique (CPM).

public static ProjectSchedule Compute(
    IEnumerable<WorkItem> workItems,
    IEnumerable<WorkItemDependency> dependencies,
    IWorkCalendar calendar)
{
    if (DependencyGraph.FindCycle(edges) is { } cycle)
        return ProjectSchedule.Cyclic(cycle);

    var order = TopologicalOrder(items.Keys, edges);
    // Passe avant puis passe arrière...
}

Trois décisions de conception méritent d'être soulignées :

  • La fonction ne modifie rien. ProjectScheduler.Compute est un pur calcul qui rend un planning candidat.
  • Les durées ne se compressent jamais.
  • Tout se compte en jours ouvrés, via un IWorkCalendar injecté.

Conclusion

C'est la promesse habituelle de la Clean Architecture, mais appliquée ici à quelque chose de concret et non trivial : un vrai algorithme d'ordonnancement, pas une simple CRUD déguisée en couches.