Files
mapo-core/Refactor_Plan.md
T
2026-05-29 08:33:43 +02:00

4.9 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.cs effettuata.
  • Identificati i metodi con caching manuale (Redis/DB) e quelli già migrati a GetOrFetchAsync.

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.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)

  • AnagEventiGeneralAsync
  • AnagStatiCommAsync
  • AnagTipoArtLvAsync
  • ArticleWithDossierAsync
  • ArticoliCountAsync
  • ArticoliCountSearchAsync
  • ArticoliGetByTipoAsync
  • ArticoliGetSearchAsync
  • ArticoliInKitAsync
  • ConfigGetAllAsync
  • DossiersGetLastFiltAsync
  • ElencoAziendeAsync
  • ElencoGruppiFaseAsync
  • ElencoLinkAsync
  • IstKitFiltAsync
  • ListGiacenzeAsync
  • MacchineGetFiltAsync
  • MacchineRecipeArchiveAsync
  • MacchineRecipeConfAsync
  • MacchineWithFluxAsync
  • MachineWithOdlAsync
  • MachIobConfAsync
  • OdlListGetFiltAsync
  • OperatoriGetFiltAsync
  • ParametriGetFiltAsync
  • PODL_getDictOdlPodlAsync (Parziale/Ibrido)
  • POdlGetByOdlAsync
  • POdlToKitListGetFiltAsync
  • StatoMacchinaAsync
  • TksScoreAsync
  • WipKitFiltAsync

🛠️ Metodi da Migrare (Usano ancora Redis/DB manuale)

  • Migrazione di ActionGetReq (linea 110: usa redisDb.StringGetAsync).
  • Migrazione di ActionSetReq (linea 136: usa BroadastMsgPipe.saveAndSendMessage).
  • Migrazione di AnagGruppiDelete/Upsert (linea 189/208: usa ExecFlushRedisPattern).
  • Migrazione di ArticoliDeleteRecord/UpdateRecord (linea 296/372: usa resetCacheArticoli).
  • Migrazione di DbDedupStats (linea 516: usa redisDb.StringGet).
  • Migrazione di DossiersDeleteRecord (linea 554: usa ExecFlushRedisPatternAsync).
  • Migrazione di DossiersTakeParamsSnapshotLast (linea 613: usa ExecFlushRedisPatternAsync).
  • Migrazione di ElencoRepartiDTO (linea 697: usa redisDb.StringGet e StringSet).
  • Migrazione di MseGetAll (linea 1460: usa redisDb.StringGet e StringSetAsync).
  • Migrazione di OdlByBatch (linea 1512: usa redisDb.StringGet e StringSet).
  • Migrazione di OdlByKey (linea 1546: usa redisDb.StringGet e StringSet).
  • Migrazione di PODL_getByKey (linea 1779: usa redisDb.StringGet e StringSet).
  • Migrazione di PodlIstKitDelete (linea 1842: usa ExecFlushRedisPattern).
  • Migrazione di POdlListByKitParent (linea 1863: usa redisDb.StringGet e StringSet).
  • Migrazione di ProcFLStats (linea 1992: usa redisDb.StringSet).
  • Migrazione di RecDbMaintStat (linea 2451: usa redisDb.StringSet).
  • Migrazione di VocabolarioGetAll (linea 2278: usa redisDb.StringGet e StringSet).

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.

Fase 4: Verifica

  • Verificare la compilazione della soluzione tramite script PowerShell.
  • Controllare che i log (NLog) continuano a riflettere correttamente le operazioni.