值物件
介紹
"展現領域描述性層面且沒有概念性身份的物件稱之為值物件。"(eric evans)。
和實體相反,實體有身份標示(id),值物件沒有身份標示。如果兩個實體的身份標示是不同的,那麼就認為他們是不同的物件/實體,即使他們的所有屬性都是一樣的。考慮兩個不同的人有相同的名字、姓氏和年齡,但是他們是不同的人,如果他們的身份編號不同的話。但是,對於乙個位址(經典的值物件)類,如果兩個位址有相同的國家、城市、街道編號等等,則認為為相同的位址。
在ddd中,值物件是領域物件的另一種型別,可以包含業務邏輯,是領域的重要組成部分。
值物件基類
abp有乙個valueobject基類,可以被繼承用來輕鬆建立值物件型別。address值物件型別示例如下:
publicclass address : valueobject //
a reference to a city entity.
public
string street
public
int number
public address(guid cityid, string street, int
number)
}
var address1 = new address(new guid("21c67a65-ed5a-4512-aa29-66308faab5af
"), "
baris manco street
", 42
);var address2 = new address(new guid("
21c67a65-ed5a-4512-aa29-66308faab5af
"), "
baris manco street
", 42
);assert.equal(address1, address2);
assert.equal(address1.gethashcode(), address2.gethashcode());
assert.true(address1 ==address2);
assert.false(address1 != address2);
即使在記憶體中是不同的物件,在我們的領域中也認為他們是完全相同的。
最佳實踐
一些值物件的最佳實踐:
返回主目錄
ABP文件翻譯 值物件
本人是abp初學者,在看英文文件和 tkb至簡 的abp框架理論研究總結 典藏版 時,發現大神 tkb至簡中少了對value objects的翻譯,看文件是新的,大神沒時間把,小弟給補充上。用於描述領域的某個方面而本身沒有概念標識的物件稱為 a value object eric evans 對於實...
ABP官方文件翻譯 3 5 規約
規約 建立規範類 使用倉儲規約 組合規約 討論介紹 規約模式是一種特別的軟體設計模式,通過使用布林邏輯將業務規則鏈結起來重新調配業務規則。維基百科 尤其是,它通常用來為實體或其他業務物件定義可復用的過濾器。示例 在這個部分,我們將看到規約模式的必要性。本部分是通用的,和abp的實現沒有必然的關係。假...
ABP官方文件翻譯 3 4 領域服務
領域服務 一些 介紹 領域服務 或者在ddd中單純的服務 用來執行領域操作和業務規則。eric evans在他的ddd書中描述了乙個好的服務有三個特徵 1.與領域概念關聯的操作,但不是實體或值物件的自然組成部分。2.介面的定義依照領域模型的其他元素。3.操作是無狀態的。不像應用服務那樣獲取或返回dt...