2009-07-02 64 views
6

我現在正在閱讀http://en.wikipedia.org/wiki/Domain-driven_design,我只需要2個快速示例,所以我明白'價值對象'和'服務'是在DDD。域驅動設計新手,請簡單解釋'價值對象'和'服務'

  • 值對象:描述事物特徵的對象。值對象沒有概念標識。它們通常是隻讀對象,可以使用Flyweight設計模式共享。

  • 服務:當操作不屬於概念對任何對象。遵循問題的自然輪廓,您可以在服務中實施這些操作。服務理念在GRASP中被稱爲「純粹加工」。

Value objexts:有人可以給我一個簡單的例子嗎?

服務:所以如果它不是一個對象/實體,也不屬於庫/工廠那麼它的服務?我不明白這一點。

回答

7

值對象的原型例子就是金錢。可以想象,如果你建立一個國際電子商務應用程序,你會想把'錢'的概念封裝到一個類中。這將允許您對貨幣價值進行操作 - 不僅基本的加減乘除等,但美元之間也可能貨幣轉換,並說,歐元。

這樣一個Money對象沒有固有的標識 - 它包含了你放入它的值,當你處理它時,它就消失了。此外,包含10美元的兩個Money對象即使是單獨的對象實例也被視爲相同。

值對象的其他示例是諸如長度之類的度量,其可能包含值和單位,例如9.87公里或3英尺。再次,除了簡單地包含數據之外,這種類型可能會提供轉換方法到其他測量等等。

另一方面,服務是執行重要域操作的類型,但並不真正適合其他更多基於「名詞」的域概念。您應儘量爭取儘可能少的服務,但有時,服務是封裝重要域概念的最佳方式。

您可以在優秀的圖書Domain-Driven Design中閱讀更多關於Value Objects,Services和更多內容的信息,我只能推薦。

3

值對象:一個典型的例子是地址。平等是基於對象的價值,因此是名稱,而不是身份。這意味着,例如2個人對象具有相同的地址,如果它們的地址對象的值是相等的,即使在地址對象在存儲器2箇中完全不同的對象,或在數據庫中的不同的主鍵。

服務:提供的行爲不一定屬於特定的域對象,但對域對象起作用。舉個例子,我想到一種服務,當產品的價格低於一定價格時,它會在網上商店發送電子郵件通知。

相關的對國內長途免費的書(埃裏克·埃文斯書的摘要):http://www.infoq.com/minibooks/domain-driven-design-quickly