Files
mapo-core/MP.SPEC/refactor_repository.md
T
2026-06-02 15:44:25 +02:00

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 \rightarrow MpSpecRepository (per allineamento naming).

Fase 2: Estrazione Modulare (Iterativa)

  • Modulo Anagrafica: Creazione AnagRepository + IAnagRepository (26 metodi migrati, codice sorgente in #if false in 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 false dei 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).