3.8 KiB
3.8 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 o FusionCache.GetOrSet)
AnagEventiGeneralAsyncAnagStatiCommAsyncAnagTipoArtLvAsyncArticleWithDossierAsyncArticoliCountAsyncArticoliCountSearchAsyncArticoliGetByTipoAsyncArticoliGetSearchAsyncArticoliInKitAsyncConfigGetAllAsyncDossiersGetLastFiltAsyncElencoAziendeAsyncElencoGruppiFaseAsyncElencoLinkAsyncIstKitFiltAsyncListGiacenzeAsyncMacchineGetFiltAsyncMacchineRecipeArchiveAsyncMacchineRecipeConfAsyncMacchineWithFluxAsyncMachineWithOdlAsyncMachIobConfAsyncOdlByBatchAsync(Migrato e rinominato)OdlListGetFiltAsyncOperatoriGetFiltAsyncParametriGetFiltAsyncPODL_getDictOdlPodlAsync(Parziale/Ibrido)POdlGetByOdlAsyncPOdlToKitListGetFiltAsyncStatoMacchinaAsyncTksScoreAsyncTraduci(Migrato conGetOrSetsu dizionario lingua)WipKitFiltAsyncMseGetAllAsync(Migrato e rinominato)OdlByKeyAsync(Migrato e rinominato)
🛠️ Metodi da Migrare (Usano ancora Redis/DB manuale)
- Migrazione di
ActionGetReq(linea 110: usaredisDb.StringGetAsync). - Migrazione di
ActionSetReq(linea 136: usaBroadastMsgPipe.saveAndSendMessage). - Migrazione di
AnagGruppiDelete/Upsert(linea 189/208: usaExecFlushRedisPattern). - 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: