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>
1.7 KiB
1.7 KiB
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
ProfileContextpour l'état global) - Duplication potentielle de patterns similaires entre les 12 hooks (chargement, erreur, CRUD)