關於實體與值物件的問題

snow0613發表於2009-05-03
在我理解,一個領域物件是實體物件還是值物件,主要是根據應用場景來決定的。

那假如說在一個系統中,有一個領域物件在某一個應用場景中屬於值物件的範疇,但是在另一個場景中卻屬於實體物件,那麼這個物件應該如何設計?

用現實生活中的例子來說明吧:

我們平時買東西都是用人民幣來支付,這個時候,不管是一張一百塊的,還是2張五十的或者是十張十塊的,它們是等值的,我認為這個時候就相當於系統中的值物件。但是我們知道,每張人民幣又都是不一樣的,因為每張人民幣都有自己唯一的編號還有印刷年份,生活中就有人喜歡收集一些特殊編號的人民幣,這個時候的人民幣就不能用值物件的方式來表示,只能以實體的方式出現。

那麼請問,系統中如果出現這樣的需求,那應該如何設計像人民幣這類的物件。

我們借鑑DDDexample裡面的例子。

首先設計兩個介面:

public interface Entity<T> {

public boolean samePrimaryKeyAs(T other);
}

public interface ValueObject<T> {

public boolean sameValueAs(T other);

}

那像這類的領域物件是要實現這兩個介面呢?還是隻實現Entity介面,然後在充當值物件的時候呼叫equals方法?

相關文章