- Logique métier mélangée avec l'UI
- Services trop couplés à Firebase
- Pas d'abstraction pour le changement de backend
- Différents patterns selon les composants
- Pas de stratégie unifiée de retry
- Messages d'erreur non centralisés
- Multiples sources de vérité
- Synchronisation manuelle entre contexts
- Pas de state management centralisé
- Règles business réparties dans les composants
- Validation côté client et serveur différente
- Pas de typage strict des domaines métier
- Hooks métier bien organisés
- Types TypeScript corrects
- Séparation des responsabilités basique
- Patterns React cohérents
src/
├── domains/ # Domaines métier
│ ├── campaign/
│ │ ├── models/ # Entités et value objects
│ │ ├── services/ # Services domaine
│ │ ├── repositories/ # Abstractions persistance
│ │ └── validators/ # Règles business
│ ├── affiliate/
│ └── payment/
├── infrastructure/ # Implémentation technique
│ ├── firebase/ # Firebase specifique
│ ├── stripe/ # Stripe specifique
│ └── http/ # HTTP client
├── application/ # Orchestration
│ ├── commands/ # Commands CQRS
│ ├── queries/ # Queries CQRS
│ └── handlers/ # Handlers métier
└── presentation/ # UI Layer
├── components/
├── pages/
└── hooks/
// 1. Entités métier typées
export class Campaign {
constructor(
public readonly id: CampaignId,
public readonly name: string,
public readonly commission: Commission,
public readonly status: CampaignStatus
) {
this.validate();
}
public updateCommission(newCommission: Commission): Campaign {
if (!this.canUpdateCommission()) {
throw new BusinessError('Cannot update commission for active campaign');
}
return new Campaign(this.id, this.name, newCommission, this.status);
}
private validate(): void {
if (!this.name || this.name.length < 3) {
throw new ValidationError('Campaign name must be at least 3 characters');
}
}
}- Extraction domain models (3 jours)
- Repository pattern implementation (2 jours)
- Error handling unification (1 jour)
- CQRS command/query separation (2 jours)
- Domain events implementation (2 jours)
- Maintenabilité : +60% facilité d'évolution
- Fiabilité : -70% bugs production
- Time-to-market : +40% vélocité développement
- Onboarding : -50% temps formation équipe
Effort estimé : 10-12 jours développeur
ROI : Très élevé (maintenabilité long terme)