Aller au contenu

Dépendances

Ce document définit les dépendances autorisées entre les différentes couches de CMonChoix Platform.

Il constitue le contrat architectural officiel du projet.


Sommaire

  • Pourquoi un contrat de dépendances ?
  • Les couches de la Platform
  • Dépendances autorisées
  • Dépendances interdites
  • Diagramme général
  • Règle de dépendance
  • Exemples
  • Anti-patterns
  • Conclusion
  • Voir aussi

Pourquoi un contrat de dépendances ?

L'une des principales causes de dérive d'une architecture est l'apparition progressive de dépendances non maîtrisées.

Une couche commence à utiliser une autre couche "juste pour un petit besoin", puis cette exception devient la norme.

À long terme, cela conduit à une architecture difficile à maintenir.

Le présent document définit donc les seules dépendances autorisées.


Les couches de la Platform

La Platform est organisée en neuf couches.

Platform
│
├── Domain Core
├── Contracts
├── Read Services
├── Write Services
├── Vertical Modules
├── Pipeline
├── Runtime
├── Frontend
└── Interfaces

Chaque couche possède un rôle précis.


Dépendances autorisées

Domain Core

Peut dépendre uniquement de :

  • PHP standard
  • Helpers internes
  • Contracts

Ne dépend jamais :

  • d'une verticale
  • du pipeline
  • du runtime
  • du frontend
  • des interfaces

Contracts

Les contrats sont totalement indépendants.

Ils définissent uniquement des interfaces et des conventions.

Ils ne contiennent aucune logique métier.


Vertical Modules

Peuvent dépendre :

  • Domain Core
  • Contracts

Ils ne doivent jamais dépendre d'une autre verticale.


Read Services

Peuvent dépendre :

  • Domain Core
  • Contracts
  • Vertical Modules

Ils restent strictement read-only.


Write Services

Peuvent dépendre :

  • Domain Core
  • Contracts
  • Vertical Modules

Ils sont les seuls autorisés à modifier les données métier.


Pipeline

Peut dépendre :

  • Domain Core
  • Contracts
  • Vertical Modules

Il ne dépend jamais du Frontend.


Runtime

Peut dépendre :

  • Pipeline
  • Domain Core
  • Contracts

Il orchestre les traitements.


Frontend

Peut dépendre :

  • Runtime
  • Projections
  • Domain Core (lecture uniquement)

Il ne dépend jamais des feeds.


Interfaces

Peuvent dépendre :

  • Runtime
  • Read Services
  • Write Services

Diagramme général

                    Platform

                        │

        ┌───────────────┼───────────────┐

        │                               │

   Domain Core                    Contracts

        │                               │

        ├───────────────┐───────────────┤

        │               │               │

Vertical Modules   Read Services   Write Services

        │               │               │

        └───────────────┴───────────────┘

                        │

                    Pipeline

                        │

                    Runtime

                        │

                    Frontend

                        │

                   Interfaces

Règle fondamentale

Une dépendance ne peut aller que vers une couche située au même niveau ou vers une couche plus fondamentale.

Une couche ne doit jamais dépendre d'une couche plus spécialisée.


Exemples

Correct

Photo
    ↓
Domain Core

Runtime
    ↓
Pipeline

Frontend
    ↓
Projection

Incorrect

Domain Core
    ↓
Smartphone

Pipeline
    ↓
Frontend

Photo
    ↓
Gaming

Read Services
    ↓
Write Services

Anti-patterns

Les dépendances suivantes sont interdites :

  • Domain Core → Vertical Modules
  • Domain Core → Pipeline
  • Domain Core → Runtime
  • Domain Core → Frontend
  • Domain Core → Interfaces

  • Vertical → Vertical

  • Pipeline → Frontend

  • Frontend → Feeds

  • Read Services → SQL UPDATE

  • Read Services → SQL DELETE

  • Read Services → SQL INSERT

  • Read Services → Runtime Write


Conclusion

Le contrat de dépendances constitue la colonne vertébrale de la Platform.

Toute évolution de l'architecture doit être vérifiée par rapport à ce document.

Une modification qui viole ce contrat doit être considérée comme une régression architecturale.


Voir aussi

  • Vision
  • Principes
  • Invariants
  • Identifier First
  • Domain Core
  • Contracts