Abbiamo un grande progetto legacy basato su Java, la disponibilità di alcune funzionalità in tutta l'applicazione è determinata dal valore corrispondente in una tabella "feature_enabled" in un database SQL. Molto simile a Windows abilita le funzionalità basate sui valori del Registro di sistema.
Ultimamente, abbiamo lavorato per ridurre in modo significativo il numero di query SQL eseguite in una parte specifica dell'app. Quindi abbiamo scritto una classe di memorizzazione nella cache che chiama la query una volta e memorizza i risultati nella cache. Sfortunatamente, non possiamo riscrivere tutte le funzioni in quanto altre parti dell'app dipendono da esso. Quindi, quando il nostro team chiama la funzione (che esegue la query SQL), forniamo l'intera classe con la proprietà della tabella in cache. La funzione quindi controlla semplicemente se la proprietà è stata impostata. In tal caso, utilizza i dati da lì, altrimenti esegue una nuova query.
Il problema è che vorremmo aggiungere questa tecnica di caching come una funzionalità che può essere abilitata come gli altri. Interrogare il DB ogni volta che il db memorizzato nella cache viene chiamato per verificare se la funzionalità è abilitata, annulla qualsiasi query che stiamo salvando. Quindi la mia domanda è che cosa è un buon modello di design per realizzare questo?