4.6 KiB
4.6 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) (In corso)
✅ Metodi Migrati (Usano già GetOrFetchAsync, FusionCache.GetOrSet o FlushFusionCacheByTagAsync)
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)
🛠️ Metodi da Migrare (Usano ancora Redis/DB manuale o pattern non standard per Fusion)
- Migrazione di
ActionGetReq(linea 110: usaredisDb.StringGetAsync). - Migrazione di
ActionSetReq(linea 136: usaBroadastMsgPipe.saveAndSendMessage). - Migrazione di
DbDedupStatsAsync(linea 516: gestione persistente su Redis, valutare se mantenere o cambiare pattern). - Migrazione di
ProcFLStats(linea 1853: usaredisDb.StringGet). - Migrazione di
RecDbMaintStatAsync(linea 2451: gestione persistente su Redis, valutare se mantenere o cambiare pattern).
(Nota: I metodi ActionGetReq, ActionSetReq, DbDedupStatsAsync, ProcFLStats e RecDbMaintStatAsync sono stati analizzati e, dove appropriato, confermati nel loro attuale pattern di gestione Redis/DB).
Fase 4: Verifica
- Verificare la compilazione della soluzione tramite script PowerShell.
- Controllare che i log (NLog) continuano a riflettere correttamente le operazioni.
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: