3.3 KiB
3.3 KiB
?? Proposta di Refactoring: Decomposizione MpSpecController
1. Situazione Attuale (AS-IS)
- Componente: MpSpecController (situato in MP.Data\Controllers).
- Pattern: "God Object" / Monolithic Repository.
- Problemi identificati:
- Violazione SRP: Gestisce entità eterogenee (Anagrafiche, Produzione, Dossier, Configurazione, Log).
- Naming: Il suffisso Controller è fuorviante (indica un livello API, mentre il ruolo è di Repository).
- Manutenibilità: Elevato rischio di regressioni durante le modifiche a causa dell'accorpamento di logiche diverse.
- Testabilità: Difficoltà estrema nel mockare le dipendenze (molteplici DbContext e parametri di configurazione) in un unico oggetto.
- Accoppiamento: MpDataService dipende da un unico, enorme oggetto per ogni operazione di persistenza.
2. Situazione Proposta (TO-BE)
- Trasformazione: MpSpecController viene rinominato in MpSpecRepository (come fallback o hub centrale temporaneo) e poi progressivamente svuotato.
- Nuova Architettura: Introduzione di Repository specializzati per Domini Logici, ognuno con la propria interfaccia (I...Repository).
- Iniezione delle Dipendenze: MpDataService smetterà di iniettare un unico repository e inizierà a iniettare solo i moduli di cui ha realmente bisogno (es. IAnagRepository, IProductionRepository, ecc.).
- Standardizzazione: Ogni repository gestirà esclusivamente il proprio DbContext di riferimento.
3. Elenco Repository da Creare (Domain Grouping)
| Repository | Responsabilità (entità/Modelli) | Context Target |
|---|---|---|
| IAnagRepository | AnagGruppi, AnagArticoli, AnagOperatori, AnagStatiComm, AnagTipoArtLv, Vocabolario, Parametri | MoonProContext |
| IProductionRepository | ODL, PODL, IstanzeKit, TemplateKit, WipKit, Macchine, Gruppi2Macc/Oper | MoonProContext |
| IDossierRepository | Dossier, DossierFluxLog | MoonProContext |
| IFluxLogRepository | FluxLog, StatDedupDTO, ParetoFluxLog | MoonPro_FluxContext |
| ISystemRepository | LinkMenu, Config, Manutenzione DB | MoonProContext / MoonProAdminContext |
4. Checklist Avanzamento Modifiche
Fase 1: Preparazione (Infrastruttura)
- Creazione file efactor_repository.md.
- Analisi delle interfacce necessarie per ogni dominio.
- Rinomina MpSpecController
\rightarrowMpSpecRepository (per allineamento naming).
Fase 2: Estrazione Modulare (Iterativa)
- Modulo Anagrafica: Creazione AnagRepository
\rightarrowSpostamento metodi\rightarrowAggiornamento MpDataService. - Modulo Produzione: Creazione ProductionRepository
\rightarrowSpostamento metodi\rightarrowAggiornamento MpDataService. - Modulo Dossier: Creazione DossierRepository
\rightarrowSpostamento metodi\rightarrowAggiornamento MpDataService. - Modulo FluxLog: Creazione FluxLogRepository
\rightarrowSpostamento metodi\rightarrowAggiornamento MpDataService. - Modulo Sistema: Creazione SystemRepository
\rightarrowSpostamento metodi\rightarrowAggiornamento MpDataService.
Fase 3: Pulizia e Verifica
- Rimozione del codice residuo da MpSpecRepository.
- Verifica della compilazione della soluzione (./build_all_par.ps1 --agent).
- Verifica della coerenza dei log e della persistenza dei dati.