La ragione per cui ES non è generalmente una buona idea per l'architettura di alto livello ("anti-pattern" non ha più alcun significato reale) è perché è complicato. Chiaro e semplice.
Un sistema ES sta andando a essere più difficile da concettualizzare e sviluppare rispetto a un sistema tradizionale supportato da un RDBMS. Pensaci. Stai essenzialmente aggiungendo un altro livello inferiore (una nuova "verità") alla tua applicazione insieme a tutti gli impianti idraulici necessari per "proiettare" quel livello verso l'alto verso il tuo dominio. Questo non è banale. Non solo perderai probabilmente molti dei vantaggi incorporati che un RDBMS può fornire in termini di vincoli, controllo dei tipi e normalizzazione dei tuoi dati (un archivio eventi di solito è un po 'più libero), devi tenere conto di cose come possibili cambiamenti futuri (versioning) e il mal di testa di modificare "retroattivamente" il tuo negozio di eventi quando ti rendi conto di dover cambiare radicalmente alcuni comportamenti (ti prometto che questo accadrà per qualsiasi sistema non banale). Nel complesso, ES presenta un sistema che è più difficile da capire, più difficile da gestire e più difficile da modificare (potrebbe sembrare un punto di contesa, ma un sistema DDD tradizionale ben progettato è più facile da cambiare. di DDD giusto?).
Dall'altro lato della medaglia, la maggior parte dei vantaggi di ES sono di alto livello (l'introduzione di un altro livello nella tua applicazione non apporta certamente vantaggi agli sviluppatori). Uno dei maggiori vantaggi è che i sistemi ES sono più facili da scalare. Un singolo archivio append-only con modelli di lettura / scrittura separati può essere ridimensionato con facilità. Inoltre, come alluso a @Ewan, poiché il tuo dominio è semplicemente una proiezione dell'archivio degli eventi (ovvero, poiché hai aggiunto un altro livello), i sistemi ES offrono la possibilità di creare facilmente diverse proiezioni dei dati (un nuovo modello di comando può emergere senza dover apportare modifiche allo schema DB, ad esempio). Questo può essere utile per il data warehousing / analisi, ma può anche aiutare a rendere l'applicazione a prova di futuro.
Ora, tenendo presente quanto sopra, possiamo vedere chiaramente che i vantaggi di un sistema ES sono ortogonali ai suoi inconvenienti: benefici di alto livello, svantaggi di basso livello. Ciò è in diretto contrasto con la maggior parte delle altre architetture: DDD si basa sulla creazione di un sistema che è semplice da sviluppare e modificare al costo di eventuali difficoltà nel ridimensionamento, ecc. In genere è un compromesso migliore per i sistemi software perché tendono ad evolversi nel tempo, l'hardware è economico e la maggior parte delle applicazioni semplicemente non richiede una scalabilità / velocità massiccia.
Pertanto, ES dovrebbe applicare quando necessario per aiutare a risolvere un problema / dominio specifico, non ciecamente a un'intera applicazione (i progetti di animali domestici sono esenti).
EDIT - Riguardo alla domanda riguardante "condividere" eventi tra contesti. Ogni contesto deve "possedere" i suoi cambiamenti. Non vuoi un cambiamento in un contesto per creare direttamente un cambiamento in un altro. In questo modo si accoppieranno insieme, il che vanifica l'intero scopo di creare due contesti in primo luogo. Questo è simile al fatto che due aggregati dipendono dallo stesso campo in un RDBMS. Penso che potresti fraintendere il vantaggio che hai delineato riguardo alla ricostruzione di diversi modelli dal tuo flusso di eventi. Questo non si applica ai modelli di comando. È possibile avere UN solo modello di comando per flusso di eventi. Le regole aziendali non possono essere applicate in modo selettivo. E a tal fine, sono possibili più modelli di lettura in qualsiasi sistema.
Più in particolare, chiediti "perché" il tuo evento EmailChanged
è pertinente a più di un contesto. Potrebbe essere possibile che tu non abbia diviso i tuoi contesti in modo appropriato? Sembra che tu abbia creato contesti attorno ai confini dell'organizzazione. Questo spesso crea problemi. Ecco una breve discussione sull'argomento:
link
È importante capire che le tue entità e i contesti limitati saranno spesso "scoperti", non decisi in base a una conoscenza olistica della tua attività. Modello in base al comportamento!