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