docs: règle architecture Clean Architecture pour Pena-tauri
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
# Règles — Architecture (Pena-tauri)
|
||||||
|
|
||||||
|
## Principe
|
||||||
|
|
||||||
|
L'architecture est **Clean Architecture**. Toute nouvelle fonctionnalité doit respecter ce découpage sans exception.
|
||||||
|
|
||||||
|
## Structure Rust (`src-tauri/src/`)
|
||||||
|
|
||||||
|
```
|
||||||
|
domain/ — entités et traits purs, zéro dépendance externe
|
||||||
|
application/ — services métier, dépend uniquement de domain/
|
||||||
|
infrastructure/ — implémentations concrètes des traits de domain/
|
||||||
|
commands/ — points d'entrée Tauri (#[tauri::command]), orchestrent application/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Structure JS (`src/`)
|
||||||
|
|
||||||
|
```
|
||||||
|
services/ — appels Tauri (invoke), logique de données
|
||||||
|
state/ — état global de l'application
|
||||||
|
ui/ — composants d'affichage, sans logique métier
|
||||||
|
```
|
||||||
|
|
||||||
|
## Règles de dépendance
|
||||||
|
|
||||||
|
| Couche | Peut dépendre de | Ne peut PAS dépendre de |
|
||||||
|
|---|---|---|
|
||||||
|
| `domain` | rien | `application`, `infrastructure`, `commands` |
|
||||||
|
| `application` | `domain` | `infrastructure`, `commands` |
|
||||||
|
| `infrastructure` | `domain` | `application`, `commands` |
|
||||||
|
| `commands` | `application`, `domain` | `infrastructure` directement |
|
||||||
|
| `ui/` (JS) | `services/`, `state/` | rien d'externe hors Tauri |
|
||||||
|
| `services/` (JS) | invoke Tauri | `ui/` |
|
||||||
|
|
||||||
|
## Ce qui est interdit
|
||||||
|
|
||||||
|
- Instancier une implémentation concrète (`ComrakRenderer`, `FileRepository`, etc.) depuis `application/` ou `commands/` — passer par injection de dépendance ou par le point d'assemblage (`lib.rs`).
|
||||||
|
- Mettre de la logique métier dans `commands/` ou `ui/`.
|
||||||
|
- Mettre des appels Tauri (`invoke`) dans `ui/` — les déléguer à `services/`.
|
||||||
|
- Créer un module hors de ces quatre couches Rust sans justification explicite.
|
||||||
|
|
||||||
|
## Point d'assemblage
|
||||||
|
|
||||||
|
`lib.rs` est le seul endroit où les implémentations concrètes sont instanciées et câblées aux services.
|
||||||
|
|
||||||
|
## Nouveau code
|
||||||
|
|
||||||
|
Avant d'ajouter un fichier, se poser la question : **dans quelle couche appartient cette responsabilité ?**
|
||||||
|
- Règle métier / contrat → `domain/`
|
||||||
|
- Orchestration d'un cas d'usage → `application/`
|
||||||
|
- Accès I/O, filesystem, bibliothèque tierce → `infrastructure/`
|
||||||
|
- Commande exposée à Tauri → `commands/`
|
||||||
Reference in New Issue
Block a user