4.3 KiB
4.3 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
FlushCacheByTagsAsync.
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 FlushCacheByTagAsync)
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)
🛠️ Metodi da Migrare (Usano ancora Redis/DB manuale)
- Migrazione di
ActionGetReq(linea 110: usaredisDb.StringGetAsync). - Migrazione di
ActionSetReq(linea 136: usaBroadastMsgPipe.saveAndSendMessage). - Migrazione di
ArticoliDeleteRecord/UpdateRecord(linea 296/372: usaresetCacheArticoli). - Migrazione di
DbDedupStats(linea 516: usaredisDb.StringGet). - Migrazione di
DossiersDeleteRecord(linea 554: usaExecFlushRedisPatternAsync). - Migrazione di
DossiersTakeParamsSnapshotLast(linea 613: usaExecFlushRedisPatternAsync). - Migrazione di
ElencoRepartiDTO(linea 697: usaredisDb.StringGeteStringSet). - Migrazione di
PodlIstKitDelete(linea 1842: usaExecFlushRedisPattern). - Migrazione di
POdlListByKitParent(linea 1863: usaredisDb.StringGeteStringSet). - Migrazione di
ProcFLStats(linea 1992: usaredisDb.StringSet). - Migrazione di
RecDbMaintStat(linea 2451: usaredisDb.StringSet).
(Nota: Il vecchio metodo VocabolarioGetAll e la gestione manuale del dizionario sono stati rimossi in favore di Traduci con FusionCache).
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: