Files
mapo-core/Refactor_Plan.md
T
2026-06-01 09:37:10 +02:00

109 lines
4.2 KiB
Markdown

# 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) (Completata)
#### ✅ Metodi Migrati o Confermati (Pattern corretto per l'uso previsto)
- `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)
- `ActionGetReq` (Pattern Redis/Channels corretto)
- `ActionSetReq` (Pattern Redis/Channels corretto)
- `DbDedupStatsAsync` (Pattern Redis persistente corretto)
- `ProcFLStats` (Pattern Redis persistente corretto)
- `RecDbMaintStatAsync` (Pattern Redis persistente corretto)
#### 🛠️ Metodi da Migrare (Nessuno)
- *Nessun metodo residuo richiede migrazione a FusionCache.*
### Fase 4: Verifica (Completata)
- [x] Verificare la compilazione della soluzione tramite script PowerShell.
- [x] Controllare che i log (NLog) continuano a riflettere correttamente le operazioni.
- [x] Verifica coerenza signature (async/task/sync).
## 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.