4.8 KiB
4.8 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 refactor_repository.md.
- Analisi delle interfacce necessarie per ogni dominio.
- Rinomina MpSpecController
\rightarrowMpSpecRepository (per allineamento naming).
Fase 2: Estrazione Modulare (Iterativa)
- Modulo Anagrafica: Creazione AnagRepository + IAnagRepository (26 metodi migrati, codice sorgente in
#if falsein MpSpecRepository). File:MP.Data\Repository\Anag\ - Modulo Produzione: Creazione ProductionRepository + IProductionRepository (32 metodi migrati). File:
MP.Data\Repository\Production\- ODL: ListODLFiltAsync, OdlByKeyAsync, ODLCloseAsync, OdlGetCurrentAsync, OdlGetStatAsync, OdlByBatchAsync
- PODL: ListPODLFiltAsync, ListPODL_ByCodArtAsync, ListPODL_ByKitParentAsync, ListPODL_KitFiltAsync, PODL_getByKeyAsync, PODL_getByOdlAsync, PODL_getDictOdlPodlAsync, PODL_startSetup, PODL_updateRecipe, PODLDeleteRecordAsync, PODLUpdateRecordAsync, PodlIstKitDeleteAsync
- Kit: IstKitDeleteAsync, IstKitFiltAsync, IstKitInsertByWKSAsync, IstKitUpsertAsync, TemplateKitDeleteAsync, TemplateKitFiltAsync, TemplateKitUpsertAsync, WipKitDeleteAsync, WipKitDeleteOlderAsync, WipKitFiltAsync, WipKitUpsertAsync, TksScoreAsync
- Macchine/Gruppi: MacchineGetFiltAsync, MacchineByMatrOperAsync, MacchineWithFluxAsync, Grp2MaccDeleteAsync, Grp2MaccInsertAsync, Grp2OperDeleteAsync, Grp2OperInsertAsync
- Misc: MseGetAllAsync, ListGiacenzeAsync, OperatoriGetFiltAsync, ParametriGetFiltAsync
- Modulo Dossier: Creazione DossierRepository + IDossierRepository (5 metodi migrati). File:
MP.Data\Repository\Dossier\- DossiersDeleteRecordAsync, DossiersGetLastFiltAsync, DossiersInsertAsync, DossiersTakeParamsSnapshotLastAsync, DossiersUpdateValoreAsync
- Modulo FluxLog: Creazione FluxLogRepository + IFluxLogRepository (3 metodi migrati). File:
MP.Data\Repository\FluxLog\- FluxLogDataReduxAsync, FluxLogGetLastFiltAsync, FluxLogParetoAsync
- Modulo Sistema: Creazione SystemRepository + ISystemRepository (7 metodi migrati). File:
MP.Data\Repository\System\- ConfigGetAllAsync, ConfigUpdateAsync, EvListInsertAsync, ForceDbMaintAsync, ListLinkAllAsync, ListLinkFiltAsync, ElencoLinkAsync
Fase 3: Pulizia e Verifica
- Passo 3.1: Spostamento a
#if falsedei metodi migrati in MpSpecRepository (33 metodi originali ancora attivi). - Passo 3.2: Verifica compilazione (dotnet build MP.Data\MP.Data.csproj).
- Passo 3.3: Aggiornamento MpDataService per iniettare i 5 nuovi repository invece di MpSpecRepository.
- Passo 3.4: Refactoring MpSpecRepository (solo metodi residui non migrati).