Simpl-Resultat/docs/adr/0002-useReducer-vs-redux.md
le king fu 942cbb0624 docs: organize technical documentation into docs/ folder
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>
2026-02-19 07:34:01 -05:00

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)