Denormalizzazione di un contesto limitato CRUD e ES per query avanzate

2

Come piccola istantanea del mio prodotto, ho 2 contesti limitati, uno che è un dominio ricco con eventi e invarianti definiti, che funziona su file implementati come CQRS / ES, e l'altro un archivio CRUD di file e dati corrispondenti che sarà utilizzato come relazione cliente / fornitore con altri contesti esclusivi nel prodotto.

Per la mia interfaccia utente, vorrei eseguire una query tra i due e finora ho creato un modello di lettura utilizzando il flusso di eventi per ripopolare un database, ma vorrei anche recuperare alcune informazioni dal contesto CRUD. Poiché gli eventi di dominio non contengono tutte le informazioni necessarie per le query (come dimensione del file, dati aggiuntivi e informazioni accidentali che non sono richieste nel modello di dominio ricco) come ci si avvicina denormalizzando le informazioni?

Al momento, le entità fanno riferimento all'archivio file utilizzando un UUID e quando l'evento viene denormalizzato, interrogo l'archivio file per ottenere le informazioni aggiuntive pertinenti e creare una copia locale. Mi aspetto di iscrivermi anche a tutti gli eventi emessi dallo store CRUD per aggiornare il modello di lettura locale in un secondo momento.

La mia domanda qui è se questo approccio sia appropriato e quali altre implementazioni comprovate sono per la creazione di una proiezione da più contesti di infrastrutture diverse?

    
posta Daniel Park 08.10.2018 - 05:28
fonte

2 risposte

1

Da quello che posso dire lo stai facendo bene .

Le tue entità fanno riferimento ad altre entità remote usando ID, che è il modo preferito di referenziazione intergenerazionale.

Stai utilizzando eventi per propagare le modifiche, che è il modo preferito.

L'unica cosa a cui devi prestare attenzione è assicurarti che la ricostruzione dei modelli di lettura non abbia effetti collaterali.

Dalla mia esperienza l'interfaccia utente arriva quasi sempre con requisiti che attraversano gli aggregati e persino i contesti limitati. CQRS ci aiuta permettendo di avere dei readmodels basati sui read use-cases e write modelli (Aggregates) basati su casi d'uso di scrittura.

    
risposta data 08.10.2018 - 06:43
fonte
1

A mio parere, sarebbe meno complesso avere un modello letto per ogni Contesto Limitato e uniscali in qualche modo nell'interfaccia utente.

Le BC sono solide delimitazioni aziendali: non è sempre così naturale o facile interrogarle. Un controesempio sarebbe BI / reporting ma non sembra essere il caso dell'interfaccia utente che stai creando.

    
risposta data 08.10.2018 - 14:15
fonte

Leggi altre domande sui tag