Domanda

Sto cercando di capire come il lato di lettura di CQRS può lavorare con un'applicazione di gestione documento di grandi dimensioni (video / file pdf / etc) che stiamo scrivendo.

Vogliamo mostrare un elenco di tutti i documenti che l'utente ha l'autorizzazione per modificare (cioè mostrare tutti i documenti l'utente può modificare) .Ci potrebbe essere 10.000 s di documenti che un particolare utente potrebbe modificare.

In generale Ho letto che il un unico "tavolo" (struttura piatta) dovrebbe essere sufficiente per la maggior parte degli schermi e con le autorizzazioni si potrebbe avere una tabella per ogni ruolo.

Come faccio a progettare il mio modello di lettura per permettermi di ottenere rapidamente i documenti che posso modificare per un utente specifico?

Al momento vedo un tavolo, tenendo tenendo i miei documenti, un'altra azienda gli utenti e un altro tavolo che collega la "modifica" il ruolo tra l'utente e la documentazione. Così sto facendo si unisce per ottenere i dati per questa schermata.

Inoltre, ci potrebbe essere un ruolo per l'eliminazione, la visualizzazione, ecc.

E 'questo il modo corretto in questo caso?

JD

È stato utile?

Soluzione

È possibile fornire una tavola che ha un ID utente con le rispettive informazioni documento denormalizzato.

SELECT * FROM documents_editable_by_user WHERE UserId = @UserId
SELECT * FROM documents_deletable_by_user WHERE UserId = @UserId
SELECT * FROM documents_visible_for_user WHERE UserId = @UserId

Ma si potrebbe creare anche dinamicamente una tabella / lista per utente nel tuo negozio modello di lettura. Questo diventa abbastanza facile una volta che si passa da un negozio di lettura basato su SQL per NoSQL (se non l'hai già.)

Soprattutto quando ci sono decine di migliaia di documenti visibili a favore o modificabili da un utente, appiattita tabelle possono dare una spinta vera e propria performance rispetto al join.

Altri suggerimenti

Quando ho avuto un modello di lettura che ha preso la forma di un filtraggio-search-forma (gioco di parole non destinato), ho usato rino-sicurezza come fondamento di un servizio di autorizzazione.

I configurato il sistema in modo che le tabelle del servizio di autorizzazione viene però spinto attraverso il sistema di pub-sub di SQL Server e SQL Server Agent, ai clienti che sono stati in parte la visualizzazione dei dati denormalizzati - Ho poi lascio Rhino.Security aderire al modello di autorizzazione insieme nel modello di lettura, su una base per-utente.

Perché io essenzialmente mai scritto alle tabelle di autorizzazione del modello di lettura dal modello di lettura, abbiamo ottenuto una bella incapsulamento sulla base di dati e la logica del servizio di autorizzazione, in quanto l'autorizzazione è stata modificata solo attraverso che di servizio, ed è era univoco e specifico (consistente) per tale servizio. Ciò significava che le nostre interfacce grafiche personalizzate per la gestione avanzati (entità gerarchiche, gruppi di utenti, gli utenti, le autorizzazioni, per-entità-permessi) requisiti di autorizzazione potrebbe ancora fare CRUD contro questo modello di autorizzazione e che sarebbe stato spinto in tempo reale molle a qualsiasi modello di lettura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top