ABP文档翻译--值对象
本人是ABP初學者,在看英文文檔和@tkb至簡 的ABP框架理論研究總結(jié)(典藏版)時,發(fā)現(xiàn)大神@tkb至簡中少了對Value Objects的翻譯,看文檔是新的,大神沒時間把,小弟給補充上?! ?/span>
-
介紹
-
值對象基類
-
最佳實踐
介紹
“用于描述領(lǐng)域的某個方面而本身沒有概念標識的對象稱為 a VALUE OBJECT”(Eric Evans)
對于實體是相反的,實體有它們的表示(id),一個值對象沒有標識。如果兩個實體的標識不相同,即使它們所有的其他實體屬性是一樣的,它們也被稱為不同的對象/實體。想象一下,兩個不同的人擁有相同的名字、姓氏和年齡,但是他們擁有不同的身份證號,他們就是不同的人。但是,對于一個地址(它是一個經(jīng)典的值對象)類,如果兩個地址是相同的國家、城市、街道號碼...等等,也被稱為同樣的地址。
在領(lǐng)域驅(qū)動模型中(DDD),值對象是領(lǐng)域?qū)ο蟮牧硪环N類型,它能包含業(yè)務(wù)邏輯,它是領(lǐng)域必不可少的一部分。
值對象基類
在ABP中,可以很簡單的就創(chuàng)建值對象類型。ABP有一個ValueObject<T>基類,繼承它就可以了。示例,地址 值對象 類型:
public class Address : ValueObject<Address>{public Guid CityId { get; private set; } //引用城市實體.public string Street { get; private set; }public int Number { get; private set; }public Address(Guid cityId, string street, int number){CityId = cityId;Street = street;Number = number;}}假設(shè)兩個值對象所有的屬性都是一致的,值對象基類的重寫equality操作(和其他相關(guān)操作和方法)來比較兩個值對象。 那么,所有這些測試都通過:
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);? 即使它們在內(nèi)存中,是不同的對象。在我們的領(lǐng)域中也是相同的。
最佳實踐
在這里有一些對于值對象最佳的實踐
- 如果沒有一個充分的理由設(shè)計值對象是易變的話,那最好設(shè)計一個值對象是不可變的(像地址這樣的)。
- 從整體概念上講,屬性組成一個值對象。例如,在一個人類實體屬性中,不應(yīng)該獨立城市ID、街道和編號。同時,它使人類實體更加簡單。
?
轉(zhuǎn)載于:https://www.cnblogs.com/lizejia/p/6230396.html
總結(jié)
以上是生活随笔為你收集整理的ABP文档翻译--值对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 09.07 jQuery 随意整理
- 下一篇: 编程面试题之——简答题(持续更新...)