2012-03-08 33 views
0

我正在建設一個應用程序,其中系統的主要輸入之一將實時滴答值。DDD和滴答作爲輸入數據

我希望能夠使用DDD,因爲我相信我的模型中有足夠的複雜性來保證它,但是我不確定如何構造事物。知識庫是獲取數據的方式,但是我看到的每個參考都將其定義爲基於拉的。即當我想要數據時,我會詢問存儲庫,它會爲您返回一個實體/聚合根。我的情況我將有用於設置我的聚合根的存儲庫,但是我需要更新內部的實體,而不需要我提出任何請求。

我對此的解決方案是定義聚合根呼叫啓動滴答的域服務。人們認爲這是正確的路嗎?

如果服務是正確的事情,人們對責任的意見是什麼。是否應該知道聚合根,並用滴答的實體改變它的狀態,或者它是否應該盲目地推送數據,並且聚合根本身知道它正在以這種方式接收數據,那麼在收到數據時監聽它並進行相應更新?

任何指針/評論/火焰感謝。

+0

您起訴C#。那麼你爲開發人員獲得SQL Server的副本並檢查他們剛纔添加的子系統是否完全相同?忽略這些設計模式可能並不聰明。不是說你不能做到與衆不同,更像是你在你面前的例子。關鍵字是「StreamInSight」。 – TomTom 2012-03-08 13:05:24

+0

感謝您的評論,但我已經對使用Rx接收流式輸入的技術堆棧感到滿意。問題是關於如何使用ddd而不是在sql server – Fen 2012-03-08 13:10:14

+0

AH中設計事物?我沒有告訴你使用它,但看看他們的API。你問如何實現它,並且我發佈了一個完全在.NET中進行學習的安裝程序。如果你不想學習,你爲什麼要問? – TomTom 2012-03-08 13:12:37

回答

0

Rx是一種通過使用狀態相互隔離的組合器來抽象狀態和發生的方法。您在Rx中唯一可以使用的地方是當您使用主題時。所以一般變異的對象,併發送,它已經變異是不是很實用的通知(怎麼樣重入?)

如果你有許多不同的服務的Pub/Sub系統還是不錯的。發佈可以發生在多個點上,並可以組合成一個流,並且在特定的流上可以有很多訂閱者。

0

我發現DDD的概念與Rx很好地協作。儘管Asti提供了支持不變性的好處,但最終大多數應用程序需要在某處進行變化。我發現如果你能分離你的突變發生的地方,那麼這是一個很好的中間立場。

根據這一點,我建議器(Rx流)數據的序列應該包含不可變數據。具有變異數據序列可能非常難以使用。

考慮到這一點,我們現在可以有一個拱門,其中回報您在聚合根。您的聚合根可撥打服務其提供的數據序列,理想值類型。您的聚合根現在可以將任何永遠的域邏輯應用於傳入數據(可能包括改變它自己的狀態)。

所以我可以想象您的工作流程將看起來像

  • 消費與資源庫的請求AggRoot
  • 庫使用工廠來創建或重新實例化AggRoot
  • AggRoot被注射服務時創建
  • 消費者然後調用AggRoot上的某些功能
  • 這會調用底層服務以獲取序列。
  • 的AggRoot訂閱該序列並處理該數據。