2011-02-10 58 views
0

我有一個使用存儲庫與數據庫交談的系統。什麼是遠程服務時的正確定義?或更好的,DDD中的存儲庫或ServiceAgent

存儲庫是爲外部網絡服務的數據庫。

我在許多地方發現了ServiceAgent,但我不知道這是否是正確的定義。

回答

0

不確定這是否是官方的術語,但我將其稱爲「服務代理」。

+0

嗯,對我來說服務代理意味着svcutil產生的一切。如果你需要額外的行爲呢?大多數人創建包裝,調用生成的代理類,但增加了驗證,緩存和異常處理。 _(這是我正在尋找的術語)_ – 2011-02-14 07:52:15

0

我只是乞求圍繞DDD的大部分原則,但我的理解是,存儲庫通常用於抽象數據庫,但它們可用於包裝任何表現爲持久性和/或可查詢存儲的行爲。所以簡而言之,我想我的建議是,如果你的服務像數據庫一樣足夠的行爲,那麼我就不會看到使用存儲庫來抽象訪問它所涉及的實體的問題。否則,如果Web服務不直接處理您的域中的數據或行爲,那麼您的情況可能是應用程序層中基礎架構級別服務的候選項。

如果有人有任何異議,請評論,因爲我想知道我自己是否誤解了存儲庫的使用目的。

1

在DDD中,存儲庫表示實體(特別是聚合根)的虛擬集合。因此,如果您擁有10M持續的客戶,那麼您可以使用存儲庫,就好像它是內存中所有10M的集合。存儲庫通常只處理您在集合中找到的相同類型的操作:添加,刪除,查找集合中的某些內容。

如果數據的實際持久性是通過Web服務發生的,那麼存儲庫的實現可能會與Web Service代理而不是數據庫交互。然而,持久性涉及Web服務的事實並不能驅動你的域名應該如何表達。也就是說,數據是否通過直接的數據庫調用持續存在,ORM,Web服務或者快遞信鴿是實現細節。

現在,如果您的域模型依賴於外部服務(例如信用卡驗證,地址驗證等)來促進,則應該以接口的形式表示爲域服務,該接口定義所需的操作根據域名模型。要清楚的是,域服務是邏輯上屬於您的域的操作,但由於某種原因或某個給定實體或值對象上的另一個原因而不適合。外部服務促進的行爲只是您可能使用域服務的一個示例,因此不要將域服務視爲「Web服務的存儲庫模式」或其他類似的東西。