Yukarıdaki sorunun muhtemelen birkaç 'ne ??' yükseltir, ancak açıklamaya çalışalım:
Ben ilgili kavramların bir çift kafamı temelde Saga-desen (sarmak için çalışıyorum http://www.rgoarchitects.com/Files/SOAPatterns/Saga.pdf Olay kaynak ile birlikte) (A DDD-konsept : http://en.wikipedia.org/wiki/Domain-driven_design )
Birlikte saran güzel bir yazı: https://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-ii-of-ii/
Bir dakika içinde soruya geliyorum, ama önce anladığım şeyi özetlemeye çalışmalıyım (bu yanlış olabilir, bu durumda lütfen düzeltin) çünkü bu neden olduğumu iyi etkileyebilir soruyla başlamak için:
- Saga deseni, bir işlem (son kullanıcı, otomatik, vb. Temelde veri değiştirecek her şey) veren bir tür brokerdir ve bu eylemleri iş faaliyetlerinde böler ve bu etkinliklerin her birini bir Mesaj Veri Yolu'na mesaj olarak gönderir. sırayla ilgilenilmesi gereken ilgili köklere gönderir.
- Bu agrega kökleri tamamen bağımsız olarak çalışabilir (endişelerin güzel bir şekilde ayrılması, büyük ölçeklenebilirlik, vb.)
- Saga örneğinin kendisi, etkinlik gönderdiği toplu köklerde bulunan herhangi bir iş mantığı içermez. Saga'da yer alan tek 'mantık', alınan işlemlere (ve ayrıca takip olaylarına) ne yapılacağını (yani hangi aktivitelerin gönderileceğini) belirleyen 'süreç' mantığıdır (genellikle bir Statemachine olarak uygulanır).
- Saga örüntüleri bir tür dağıtılmış işlem örüntüsü uygular. Yani: agrega köklerinden biri (birbirinin varlığını bilmeden tekrar özerk bir şekilde çalışır) başarısız olduğunda, tüm eylemin geri alınması gerekebilir.
- Bu, faaliyet raporlarının Saga'ya geri gönderilmesinden sonra tüm agrega köklerine sahip olarak uygulanır. (Başarı ve hata durumunda)
- Tüm agrega köklerinin bir başarıya dönmesi durumunda, Saga bundan sonra ne yapacağını belirlerse (veya yapılmasına karar verirse) iç statemachine
- Başarısızlık durumunda, Saga, son eylemde yer alan Tazminat Eylemi olarak adlandırılan tüm toplu köklere, yani: toplam köklerin her birinin yaptığı son eylemi geri almak için bir eylem yayınlar.
- Eğer eylem "artı 1 oy" ise bu sadece bir "Eksi 1 oy" yapıyor olabilir, ancak bir blog yazısını önceki sürümüne geri yüklemek gibi daha karmaşık olabilir.
- Etkinlik kaynağı oluşturma (bkz. İkisini birleştiren blog yazısı), toplu köklerin her birinin merkezi bir Etkinlik Deposunda üstlendiği etkinliklerin her birinin sonuçlarının kaydedilmesini dışsallaştırmayı amaçlamaktadır (değişikliklere bu bağlamda 'etkinlikler' denir)
- Bu Etkinlik deposu 'gerçeğin tek versiyonu'dur ve sadece depolanan olayları tekrarlayarak (aslında bir olay günlüğü gibi) tüm varlıkların durumunu tekrar oynatmak için kullanılabilir
- İkisini birleştirmek (yani: agrega köklerinin Saga'ya rapor vermeden önce değişikliklerini kaydetmek için dış kaynak sağlamak için Olay kaynağı kullanmasına izin vermek), biri sorumla ilgili olan çok sayıda güzel olasılık sağlar ...
Tek seferde kavramak çok şey olduğu için bunu omzumdan çıkarmam gerektiğini hissettim. Bu bağlam / zihniyet göz önüne alındığında (yine yanlışsa lütfen düzeltin)
soru: Bir toplu kök bir Telafi Eylemi aldığında ve bu toplu kök Olay kaynağı kullanarak durum değişikliklerini dışa aktardıysa, her durumda Telafi Eylemi yalnızca Olay Deposu'ndaki son olayın silinmesi anlamına gelmez. Toplam Kök mü? (Kalıcı uygulamanın silmeye izin verdiği varsayılarak)
Bu benim için çok anlamlı olurdu (ve bu kombinasyonun bir başka büyük yararı da olurdu), ancak dediğim gibi, bu varsayımları bu kavramların yanlış / eksik bir anlayışına dayandırabilirim.
Umarım bu çok uzun sürmez.
Teşekkürler.