3.7 KiB
3.7 KiB
Piano di Refactoring: Migrazione a FusionCache in 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.
Analisi dello stato attuale
- Classe target:
MP.SPEC\Data\MpDataService.cs - Pattern attuale: Molti metodi utilizzano manualmente
redisDb.StringGetAsynceredisDb.StringSetAsynccon serializzazione JSON manuale. - Metodo Standard:
GetOrFetchAsync<T>(string operationName, string cacheKey, Func<Task<T>> fetchFunc, TimeSpan expiration, params string[] tags).
Strategia di Migrazione
1. Identificazione Metodi Target
Andrò a mappare tutti i metodi in MpDataService.cs che:
- Utilizzano
redisDbdirettamente per la lettura/scrittura. - Gestiscono manualmente la serializzazione/deserializzazione con
JsonConvert. - Gestiscono manualmente il fallback dal Redis al DB.
2. Classificazione Metodi
I metodi verranno suddivisi in:
- Lettura (Cache-aside): Metodi che recuperano dati. Questi saranno i candidati principali per
GetOrFetchAsync. - Scrittura/Invalidazione: Metodi che aggiornano il DB e devono invalidare la cache (es.
AnagGruppiUpsert,ArticoliUpdateRecord). Questi dovranno utilizzare_cache.RemoveByTagAsynco_cache.RemoveAsync.
3. Piano di Implementazione (Step-by-Step)
Fase 1: Analisi e Mapping
- Identificare ogni occorrenza di
redisDb.StringGet/StringGetAsyncinMpDataService.cs. - Verificare se la chiave di cache utilizzata è gestita tramite
Utils.redis....
Fase 2: Refactoring Metodi di Lettura
ActionGetReq(Completato)AnagEventiGeneralAnagEventiGetByMacchAnagKeyValGetAllAnagStatiCommAnagTipoArtLvAsyncArticleWithDossierConfigGetAllConfigGetAllAsyncDbDedupStatsDossiersGetLastFiltElencoGruppiFaseElencoRepartiDTOExpiryReloadParamGetIobInfoIstKitFiltListGiacenzeListPODL_ByCodArtMacchineGetFiltMacchineRecipeArchiveMacchineRecipeConfMacchineWithFluxMachIobConfMseGetAllOdlByBatchOdlGetCurrentAsyncOdlListGetFiltOperatoriGetFiltParametriGetFiltPOdlGetByKeyPOdlGetByOdlPOdlListByKitParentPOdlListGetFiltPOdlListGetFiltAsyncProcFLStatsStatoMacchinaTagConfGetKeyTemplateKitFiltTksScoreVocabolarioGetAllWipKitFilt
Fase 3: Refactoring Metodi di Scrittura e Invalidazione
AnagGruppiDeleteAnagGruppiUpsertArticoliDeleteRecordArticoliUpdateRecordConfigResetCacheDossiersDeleteRecordDossiersTakeParamsSnapshotLastIstKitDeleteIstKitInsertByWKSIstKitUpsertPodlIstKitDeletePOdlDoSetupPOdlUpdateRecipePOdlUpdateRecordRecipeSetByPODLTemplateKitDeleteTemplateKitUpsert
Fase 4: Verifica
- Verificare la compilazione della soluzione tramite script PowerShell.
- Controllare che i log (NLog) continuino 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: