1

我最近熟悉DDD並嘗試獲取關鍵概念,並且我有一個查詢事件來爲本地訂戶發佈域事件,所以我可以假設事件發佈者,既照顧AQMP向遠程用戶發佈,同時還利用observable將其發佈給本地用戶,這是一個可擴展的解決方案嗎?或者是否有一種熟悉的模式來處理這個問題?(同時建議是否有針對prblm的反應性解決方案,可能是RxJava等)在DDD中本地消費的域事件

回答

3

本地或遠程用戶的位置應該對域完全透明實體提出發佈該事件。

您的想法與我使用的設計非常相似。我使用了一個非常原始的本地事件發佈者版本,它通過消息中間件(AMQP將事件傳播給所有其他本地發佈者)進行通信。

我不這樣做,在Java中,但事實上,對於本地事件「總線」我用Rx.Net(反應的擴展在所有的語言幾乎相同的API,所以RxJava將工作)

與事務管理的簡化版本拆出來是這樣的:

public class EventHub 
{ 
    private readonly ISubject<object, object> _messages; 
    public EventHub() 
    { 
     var _subject = new Subject<object>(); 
     m_messages = Subject.Synchronize(_subject); 
    } 

    public void Publish<T>(T message) 
    { 
     m_messages.OnNext(message); 
    } 

    public IObservable<T> AsObservable<T>() 
    { 
     return m_messages 
      .ObserveOn(ThreadPoolScheduler.Instance) 
      .OfType<T>() 
      .Synchronize() 
      .AsObservable(); 
    } 
} 

添加遠程功能將被添加另一個用戶,這將訂閱的所有事件,並將其路由到其它地方eventHubs,也傾聽其他eventhubs和在當地中心發佈他們的活動。它不會更改EventHub組件。