1
我最近熟悉DDD並嘗試獲取關鍵概念,並且我有一個查詢事件來爲本地訂戶發佈域事件,所以我可以假設事件發佈者,既照顧AQMP向遠程用戶發佈,同時還利用observable將其發佈給本地用戶,這是一個可擴展的解決方案嗎?或者是否有一種熟悉的模式來處理這個問題?(同時建議是否有針對prblm的反應性解決方案,可能是RxJava等)在DDD中本地消費的域事件
我最近熟悉DDD並嘗試獲取關鍵概念,並且我有一個查詢事件來爲本地訂戶發佈域事件,所以我可以假設事件發佈者,既照顧AQMP向遠程用戶發佈,同時還利用observable將其發佈給本地用戶,這是一個可擴展的解決方案嗎?或者是否有一種熟悉的模式來處理這個問題?(同時建議是否有針對prblm的反應性解決方案,可能是RxJava等)在DDD中本地消費的域事件
本地或遠程用戶的位置應該對域完全透明實體提出發佈該事件。
您的想法與我使用的設計非常相似。我使用了一個非常原始的本地事件發佈者版本,它通過消息中間件(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組件。