Move specs and masterplan to docs/archive/, add architecture.md with full technical overview, create 5 ADRs (Tauri v2, useReducer, sqlx migrations, AES-256-GCM encryption, multi-profile DB), and move guide-utilisateur.md into docs/. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
38 lines
1.7 KiB
Markdown
38 lines
1.7 KiB
Markdown
# ADR-0002 : useReducer plutôt que Redux/Zustand
|
|
|
|
- **Date** : 2025-01
|
|
- **Statut** : Accepté
|
|
|
|
## Contexte
|
|
|
|
L'application nécessite une gestion d'état complexe pour chaque domaine métier (transactions, catégories, budget, import, etc.). Chaque domaine a son propre cycle de vie avec des opérations CRUD, du chargement asynchrone, et des états d'erreur.
|
|
|
|
Les options considérées :
|
|
- **Redux** (+ Redux Toolkit) : standard de l'industrie, middleware, DevTools
|
|
- **Zustand** : léger, API simple, pas de boilerplate
|
|
- **useReducer** (React natif) : intégré à React, pas de dépendance externe
|
|
|
|
## Décision
|
|
|
|
Nous avons choisi **useReducer** (React natif) avec un hook custom par domaine métier, soit 12 hooks au total.
|
|
|
|
Chaque hook encapsule :
|
|
- Un reducer avec des actions typées
|
|
- Les appels aux services (couche d'accès aux données)
|
|
- L'état de chargement et la gestion d'erreur
|
|
|
|
## Conséquences
|
|
|
|
### Positives
|
|
|
|
- **Zéro dépendance** supplémentaire pour la gestion d'état
|
|
- **Colocalisation** : chaque domaine est isolé dans son propre hook, ce qui facilite la maintenance
|
|
- **Typage TypeScript** natif des actions et de l'état, sans configuration additionnelle
|
|
- **Simplicité** : pas de store global, pas de middleware, pas de boilerplate Redux
|
|
- **Prévisibilité** : le pattern reducer garde la logique de transition d'état explicite
|
|
|
|
### Négatives
|
|
|
|
- **Pas de DevTools** intégrés (pas d'inspection de l'historique des actions comme Redux DevTools)
|
|
- **Pas de partage d'état** natif entre hooks (résolu par le contexte `ProfileContext` pour l'état global)
|
|
- **Duplication** potentielle de patterns similaires entre les 12 hooks (chargement, erreur, CRUD)
|