85 lines
3.8 KiB
Markdown
85 lines
3.8 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 `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` o `FusionCache.GetOrSet`)
|
|
- `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` (Parziale/Ibrido)
|
|
- `POdlGetByOdlAsync`
|
|
- `POdlToKitListGetFiltAsync`
|
|
- `StatoMacchinaAsync`
|
|
- `TksScoreAsync`
|
|
- `Traduci` (Migrato con `GetOrSet` su dizionario lingua)
|
|
- `WipKitFiltAsync`
|
|
- `MseGetAllAsync` (Migrato e rinominato)
|
|
- `OdlByKeyAsync` (Migrato e rinominato)
|
|
|
|
#### 🛠️ 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 `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`).
|
|
|
|
*(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.
|
|
- **Rischio**: Errori di serializzazione.
|
|
- *Mitigazione*: `FusionCache` gestisce la serializzazione, ma è necessario assicurarsi che i tipi di ritorno siano compatibili con le aspettative dei chiamanti.
|
|
|