Sto lentamente cercando di migrare la nostra applicazione web per utilizzare i principal CQRS. In particolare, ho separato le interfacce "write" e "read" in comandi e query.
Ho implementato una classe "reader" in grado di leggere alcuni dati dal DB. Ho anche implementato un decoratore per questo lettore che memorizza nella cache i dati per evitare inutili ritorni al DB. Al momento questo decoratore sta memorizzando nella cache per richiesta. Vorrei memorizzare questi dati per una durata maggiore, ad esempio per una finestra scorrevole di 5 minuti.
Tuttavia, il problema è che un comando che aggiorna i dati dovrebbe invalidare la cache una volta che si è verificata la scrittura, e mi piacerebbe acquisire questa nozione esplicitamente nel nostro modello di dominio.
In particolare, ecco l'interfaccia di "lettura" (c #):
public interface IRoleLister
{
IList<DomainRole> Fetch(OtuIdentity otuIdentity);
IList<DomainRole> FetchForAuthenticatedId(int userId);
}
Ed ecco l'interfaccia di scrittura:
public interface ICanChangeDomainRoles
{
void AddRoleToUser(int userId, DomainRole domainRole);
void RemoveRoleFromUser(int userId, DomainRole domainRole);
}
Mi rendo conto che alcune varianti del modello di osservatore sarebbero probabilmente applicabili, ma non sono sicuro di come acquisirlo nel modello di dominio.
Ho anche identificato un altro problema, ovvero la denominazione della chiave della cache. In IRoleLister voglio memorizzare nella cache IList < DomainRole > per utente (es. typeof (IList < DomainRole >) + ": userid" come chiave) ma in ICanChangeDomainRoles non conosco il nome della chiave. I miei pensieri sono che l'Osservatore dovrebbe in qualche modo essere responsabile di questo. (O forse qualche altra interfaccia? Come faccio a catturare quel concetto nel mio dominio).
Infine, mi rendo conto che una certa forma di cache distribuita può essere d'aiuto, ma sembra un dettaglio di implementazione: voglio catturare il concetto di invalidazione / notifica / osservatore nel mio modello di dominio.
Qualsiasi suggerimento sarebbe apprezzato