Files
mapo-core/Refactor_Plan.md
T
2026-06-01 08:25:28 +02:00

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.cs effettuata.
  • 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)

  • AnagEventiGeneralAsync
  • AnagStatiCommAsync
  • AnagTipoArtLvAsync
  • ArticleWithDossierAsync
  • ArticoliCountAsync
  • ArticoliCountSearchAsync
  • ArticoliGetByTipoAsync
  • ArticoliGetSearchAsync
  • ArticoliInKitAsync
  • ConfigGetAllAsync
  • DossiersGetLastFiltAsync
  • ElencoAziendeAsync
  • ElencoGruppiFaseAsync
  • ElencoLinkAsync
  • IstKitFiltAsync
  • ListGiacenzeAsync
  • MacchineGetFiltAsync
  • MacchineRecipeArchiveAsync
  • MacchineRecipeConfAsync
  • MacchineWithFluxAsync
  • MachineWithOdlAsync
  • MachIobConfAsync
  • OdlByBatchAsync (Migrato e rinominato)
  • OdlListGetFiltAsync
  • OperatoriGetFiltAsync
  • ParametriGetFiltAsync
  • PODL_getDictOdlPodlAsync (Gestione manuale L1/L2 con FusionCache)
  • POdlGetByOdlAsync
  • POdlToKitListGetFiltAsync
  • StatoMacchinaAsync
  • TksScoreAsync
  • Traduci (Migrato con GetOrSet su dizionario lingua)
  • WipKitFiltAsync
  • MseGetAllAsync (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 con FlushCacheArticoli)
  • ArticoliUpdateRecord (Migrato con FlushCacheArticoli)
  • 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: usa redisDb.StringGetAsync).
  • Migrazione di ActionSetReq (linea 136: usa BroadastMsgPipe.saveAndSendMessage).
  • Migrazione di DbDedupStatsAsync (linea 516: gestione persistente su Redis, valutare se mantenere o cambiare pattern).
  • Migrazione di ProcFLStats (linea 1853: usa redisDb.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.
  • Rischio: Errori di serializzazione.
    • Mitigazione: FusionCache gestisce la serializzazione, ma è necessario assicurarsi che i tipi di ritorno siano compatibili con le aspettative dei chiamanti.