# Piano di Refactoring: Migrazione a FusionCache in `MpDataService.cs` Stiamo lavorando sul progetto MP-SPEC.sln, dentro la cartella MP-SPEC (ed i progetti da cui dipende). Voglio ottimizzare il file Data\MpDataService.cs ## Obiettivo Migrare la logica di caching manuale (Redis + DB) verso l'utilizzo di `IFusionCache` per implementare un approccio multi-layer (Memory + Redis + DB), standardizzando l'accesso ai dati. ## Strategia di Migrazione - **Metodo Standard**: `GetOrFetchAsync(string operationName, string cacheKey, Func> fetchFunc, TimeSpan expiration, params string[] tagList)`. - **Invalidazione**: Utilizzare i tag tramite `FlushFusionCacheByTagAsync`. ## Stato Avanzamento ### Fase 1: Analisi e Mapping (Completata) - Analisi di `MpDataService.cs` effettuata. - Identificati i metodi con caching manuale (Redis/DB) e quelli già migrati a `GetOrFetchAsync`. ### Fase 2: Refactoring Metodi di Lettura (Cache-aside) (Completata) #### ✅ Metodi Migrati o Confermati (Pattern corretto per l'uso previsto) - `AnagEventiGeneralAsync` - `AnagStatiCommAsync` - `AnagTipoArtLvAsync` - `ArticleWithDossierAsync` - `ArticoliCountAsync` - `ArticoliCountSearchAsync` - `ArticoliGetByTipoAsync` - `ArticoliGetSearchAsync` - `ArticoliInKitAsync` - `ConfigGetAllAsync` - `DossiersGetLastFiltAsync` - `ElencoAziendeAsync` - `ElencoGruppiFaseAsync` - `ElencoLinkAsync` - `IstKitFiltAsync` - `ListGiacenzeAsync` - `MacchineGetFiltAsync` - `MacchineRecipeArchiveAsync` - `MacchineRecipeConfAsync` - `MacchineWithFluxAsync` - `MachineWithOdlAsync` - `MachIobConfAsync` - `OdlByBatchAsync` (Migrato e rinominato) - `OdlListGetFiltAsync` - `OperatoriGetFiltAsync` - `ParametriGetFiltAsync` - `PODL_getDictOdlPodlAsync` (Gestione manuale L1/L2 con FusionCache) - `POdlGetByOdlAsync` - `POdlToKitListGetFiltAsync` - `StatoMacchinaAsync` - `TksScoreAsync` - `Traduci` (Migrato con `GetOrSet` su dizionario lingua) - `WipKitFiltAsync` - `MseGetAllAsync` (Migrato e rinominato) - `OdlByKeyAsync` (Migrato e rinominato) - `TemplateKitDeleteAsync` (Migrato con tag invalidazione) - `TemplateKitUpsertAsync` (Migrato con tag invalidazione) - `WipKitDeleteAsync` (Migrato con tag invalidazione) - `WipKitUpsertAsync` (Migrato con tag invalidazione) - `AnagGruppiDeleteAsync` (Migrato con tag invalidazione) - `AnagGruppiUpsertAsync` (Migrato con tag invalidazione) - `Grp2MaccDeleteAsync` (Migrato con tag invalidazione) - `Grp2MaccInsertAsync` (Migrato con tag invalidazione) - `Grp2OperDeleteAsync` (Migrato con tag invalidazione) - `Grp2OperInsertAsync` (Migrato con tag invalidazione) - `ArticoliDeleteRecord` (Migrato con `FlushCacheArticoli`) - `ArticoliUpdateRecord` (Migrato con `FlushCacheArticoli`) - `DossiersDeleteRecordAsync` (Migrato con tag invalidazione) - `DossiersTakeParamsSnapshotLast` (Migrato con tag invalidazione) - `DossiersInsert` (Migrato con tag invalidazione) - `DossiersUpdateValoreAsync` (Migrato con tag invalidazione) - `ElencoRepartiDTO` (Migrato) - `PodlIstKitDeleteAsync` (Migrato con tag invalidazione) - `POdlUpdateRecipe` (Migrato con tag invalidazione) - `POdlUpdateRecord` (Migrato con tag invalidazione) - `POdlGetByKey` (Migrato con FusionCache) - `POdlListByKitParentAsync` (Migrato con FusionCache) - `ActionGetReq` (Pattern Redis/Channels corretto) - `ActionSetReq` (Pattern Redis/Channels corretto) - `DbDedupStatsAsync` (Pattern Redis persistente corretto) - `ProcFLStats` (Pattern Redis persistente corretto) - `RecDbMaintStatAsync` (Pattern Redis persistente corretto) #### 🛠️ Metodi da Migrare (Nessuno) - *Nessun metodo residuo richiede migrazione a FusionCache.* ### Fase 4: Verifica (Completata) - [x] Verificare la compilazione della soluzione tramite script PowerShell. - [x] Controllare che i log (NLog) continuano a riflettere correttamente le operazioni. - [x] Verifica coerenza signature (async/task/sync). ## Rischi e Mitigazioni - **Rischio**: Discrepanza nelle chiavi di cache tra vecchio e nuovo sistema. - *Mitigazione*: Utilizzare rigorosamente le costanti in `Utils.redis...` per garantire che le chiavi siano identiche o gestite dal nuovo sistema. - **Rischio**: Errori di serializzazione. - *Mitigazione*: `FusionCache` gestisce la serializzazione, ma è necessario assicurarsi che i tipi di ritorno siano compatibili con le aspettative dei chiamanti.