Rapport d'Analyse de Conformité DDD - Module Notifications¶
1. État Global¶
Le module Notifications suit globalement la structure DDD demandée, mais présente plusieurs écarts critiques par rapport aux "Règles Absolues" du GUIDE_ARCHITECTURE_DDD.md.
2. Analyse Détaillée¶
✅ Points de Conformité¶
- Structure des dossiers : Respectée (domain, application, infrastructure, interface-adapters).
- Exceptions :
ErreurNotificationhérite bien deErreurMetier, avecthis.nameetcaptureStackTrace. - Service de Validation : Implémentation correcte avec Map de schémas Zod et structure à deux étapes.
- Controller Wrapper :
NotificationsModuleControllerutilise des arrow functions et gère correctementreq.utilisateur. - DI Module : Structure correcte et respect des interfaces.
❌ Non-Conformités et Écarts (Critiques)¶
A. Use Cases (Sévérité : Haute)¶
Dans EnvoyerNotificationUseCase.ts :
- Violation de la règle des 5 étapes : Le Use Case ne respecte pas strictement le squelette obligatoire.
- Audit bloquant : L'audit est fait via .catch() sur la promesse, mais la structure recommandée est un bloc try/catch privé séparé.
- Construction du résultat : construireResultat() retourne un objet simple au lieu d'appeler versObjetPlainPublic() sur une entité.
- Logique métier : executerLogique() appelle un service externe (notificationService) mais ne manipule pas d'entité métier pour valider des invariants avant l'envoi.
- Méthode parasite : Présence de traiterNotificationInApp() dans le Use Case, ce qui mélange orchestration et logique d'exécution.
B. Domaine & Entités (Sévérité : Moyenne)¶
- Invariants : L'entité
Notification(à vérifier plus en détail) semble être utilisée comme un simple DTO dans le use casetraiterNotificationInApp.
C. Infrastructure (Sévérité : Faible)¶
- Schémas Zod : Les schémas sont définis directement dans le
ServiceValidationNotifications.tsau lieu d'être dans des fichiers séparés dansinfrastructure/schemas/zod/.
3. Recommandations¶
- Refactoriser
EnvoyerNotificationUseCase: - Réimplémenter strictement les 5 étapes : Validation $\rightarrow$ Logique $\rightarrow$ Audit $\rightarrow$ Construction $\rightarrow$ Gestion Erreur.
- Déplacer la logique de
traiterNotificationInAppvers un service de domaine ou l'intégrer correctement dansexecuterLogique. -
Utiliser
versObjetPlainPublic()pour le résultat final. -
Déplacer les schémas Zod :
-
Créer des fichiers individuels dans
infrastructure/schemas/zod/pour chaque action (ex:envoyerNotification.schemas.ts). -
Renforcer l'Entité Notification :
- S'assurer que
Notification.creer()valide les invariants métier et que l'entité possède des comportements propres.