CQRS e invalidazione della cache (durante il bilanciamento del carico)

3

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

    
posta Peter McEvoy 14.03.2012 - 11:03
fonte

1 risposta

1

In generale, mi aspetto che il caching sia un criterio applicato ai dati e non un attributo dei dati stessi.

Questo è un candidato perfetto per la programmazione orientata agli aspetti (ad esempio PostSharp) e / o l'inversione dei framework di controllo (es. Spring.Net).

    
risposta data 15.03.2012 - 08:18
fonte

Leggi altre domande sui tag