4.2 KiB
4.2 KiB
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<T>(string operationName, string cacheKey, Func<Task<T>> fetchFunc, TimeSpan expiration, params string[] tagList). - Invalidazione: Utilizzare i tag tramite
FlushFusionCacheByTagAsync.
Stato Avanzamento
Fase 1: Analisi e Mapping (Completata)
- Analisi di
MpDataService.cseffettuata. - 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)
AnagEventiGeneralAsyncAnagStatiCommAsyncAnagTipoArtLvAsyncArticleWithDossierAsyncArticoliCountAsyncArticoliCountSearchAsyncArticoliGetByTipoAsyncArticoliGetSearchAsyncArticoliInKitAsyncConfigGetAllAsyncDossiersGetLastFiltAsyncElencoAziendeAsyncElencoGruppiFaseAsyncElencoLinkAsyncIstKitFiltAsyncListGiacenzeAsyncMacchineGetFiltAsyncMacchineRecipeArchiveAsyncMacchineRecipeConfAsyncMacchineWithFluxAsyncMachineWithOdlAsyncMachIobConfAsyncOdlByBatchAsync(Migrato e rinominato)OdlListGetFiltAsyncOperatoriGetFiltAsyncParametriGetFiltAsyncPODL_getDictOdlPodlAsync(Gestione manuale L1/L2 con FusionCache)POdlGetByOdlAsyncPOdlToKitListGetFiltAsyncStatoMacchinaAsyncTksScoreAsyncTraduci(Migrato conGetOrSetsu dizionario lingua)WipKitFiltAsyncMseGetAllAsync(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 conFlushCacheArticoli)ArticoliUpdateRecord(Migrato conFlushCacheArticoli)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)
- Verificare la compilazione della soluzione tramite script PowerShell.
- Controllare che i log (NLog) continuano a riflettere correttamente le operazioni.
- 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.
- Mitigazione: Utilizzare rigorosamente le costanti in
- Rischio: Errori di serializzazione.
- Mitigazione:
FusionCachegestisce la serializzazione, ma è necessario assicurarsi che i tipi di ritorno siano compatibili con le aspettative dei chiamanti.
- Mitigazione: