Temelde kafamı CQRS ve ilgili kavramların etrafına sarmaya çalışıyorum .
CQRS, Mesajlaşma ve Etkinlik Kaynaklandırma'yı zorunlu olarak içermemesine rağmen, iyi bir kombinasyon gibi görünmektedir (bu kavramları birleştiren birçok örnek / blog yazısı ile görülebileceği gibi)
Bir şey için durum değişikliği için bir kullanım durumu göz önüne alındığında (SO ile ilgili bir Soruyu güncelleyin), aşağıdaki akışın doğru olduğunu düşünür müsünüz (en iyi uygulamada olduğu gibi)?
Sistem, birkaç küçük komuta ayrılabilen bir toplu UpdateQuestionCommand yayınlar: Soru Toplama Kökü'ne hedeflenen UpdateQuestion ve Kullanıcı Toplama Kökü'nü hedefleyen UpdateUserAction (noktaları saymak vb.). Bunlar, noktadan noktaya mesajlaşma kullanılarak senkronize olmayan bir şekilde gönderilir.
Toplam kökler kendi işlerini yaparlar ve eğer her şey yolunda giderse, sırasıyla bir Olay Deposuna dış kaynaklı durum içeren QuestionUpdated ve UserActionUpdated olaylarını tetikler.
Bu olaylar aynı zamanda yayın için bir pub / alt kuyruğuna konur. Herhangi bir abone (aralarında Okuma Görünümleri oluşturan bir veya birden fazla Projektör) bu etkinliklere abone olabilir.
Genel soru: En iyi uygulama Komutların Noktadan Noktaya iletilmesi (yani: Alıcı biliniyor), ancak olaylar yayınlanır (yani: alıcı (lar) bilinmemektedir)?
Yukarıdakileri varsayarsak, Komutların noktadan noktaya yerine pub / sub üzerinden yayınlanmasına izin vermenin avantajı / dezavantajı ne olurdu?
Örneğin: Saga'ları kullanırken Komutlar yayınlamak bir sorun olabilir, çünkü agrega köklerinden birinin başarısızlığı durumunda bir Saga'nın oynaması gereken arabuluculuk rolü engellenir, çünkü destan hangi toplu köklerin başlayacağını bilmez .
Diğer yandan, yayın komutlarına izin verildiğinde avantajlar (esneklik) görüyorum.