2012-04-26 137 views
5

我正在開發一個應用程序,用戶可以按照與Twitter類似的方式跟隨對方。DDD:連接對象是實體對象還是值對象?

讀完DDD後,我明白我的用戶是實體對象 - 我使用他們的唯一ID來引用它們。

當一個用戶'追隨'另一個(即形成連接)時,該關係被存儲在多對多表中。其字段包括FollowerID,TargetIDStatus。每個追隨者/目標組合只能有兩條記錄(一個是活動的,另一個是非活動的),所以我可以根據它們的屬性安全地識別對象。

所以,我認爲我的連接對象是值對象,而不是實體對象,但我不確定。你能幫我做這個決定嗎?

回答

4

你是正確的,實體是唯一的,並帶有具有身份的概念(即只有一個唯一的用戶可以存在)。 A Connection依賴於其他User實體。它代表了兩個用戶之間的某個方面。這方面是是否存在活動或非活動連接。在不包含用戶連接的數據的情況下,連接沒有身份。它甚至可能在數據庫中擁有自己的主鍵,但從域的角度來看,它沒有它自己的身份。

因此,我會說Connection是一個對象。


爲了支持我的結論,Microsoft.Net Architecting Applications for the Enterprise,187頁,說:

值對象類表示在大多 包含數據和生命爲它包含的數據域的實體。值對象是 ,它由包含的值的組合完全標識。另一方面,實體 對象具有自己的生活和豐富的行爲 ,無論其包含的數據如何。實體對象通常是具有較長使用期限的對象 。值對象表示實體的一個方面,只能與實體相關。

而且還189頁上:需要

一個進一步的評論,說明 實體和值對象之間的差異。您不需要存儲庫或數據對象的數據 。您只需要一個實體的存儲庫。 給定實體的存儲庫(或映射程序)肯定會取決於給定實體的所有值對象。

+0

「不包含用戶連接的數據,連接沒有標識」 - 該連接對於FollowerID和TargetID的組合是唯一的。所以如果我們有一個TaregtID和FollowerID,我認爲它是userids,我們可以識別一個連接。那麼它怎麼不是一個實體對象呢? – 2012-04-27 00:43:56

+0

@HariSubramaniam,另一種說法是[本網站](http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/)說,「沒有一個實體,價值對象就不能獨立生存」。確定哪個是哪一個並不總是容易的,但是在思考並研究之後,我傾向於將其視爲一個價值對象。 – Matt 2012-04-27 14:19:35

2

前一段時間,我看到一個關於發明了克隆技術的科學家的漫畫。每次他克隆自己時,他都銷燬了以前的版本。然後,觀看示威的人決定中斷和破壞破壞部分,因此有兩名科學家。卡通以一些有趣的存在主義質疑結束。

值vs實體不是關於是否擁有一個或另一個表單中的id字段。要點是 - 我們如何通過我們的域視角來看待這些對象。如果他們是價值對象,那麼只有他們的價值重要 - 第一,第三和第53科學家是一樣的。如果我們關心身份,如果我們認爲克隆第三位科學家永遠不會像第一位科學家那樣,那麼我們的對象就是一個實體。

相關問題