1.引言

提到值對(duì)象,我們可能立馬就想到值類型和引用類型。而在C#中,值類型的代表是strut和enum,引用類型的代表是class、interface、delegate等。值類型和引用類型的區(qū)別,大家肯定都知道,值類型分配在棧上,引用類型分配在堆上。
那是不是值類型對(duì)應(yīng)的就是值對(duì)象,引用類型對(duì)應(yīng)的就是實(shí)體嗎?很抱歉,不是的。

值對(duì)象我們要分開(kāi)來(lái)看,其包含兩個(gè)詞:值和對(duì)象。值是什么?比如,數(shù)字(1、2、3.14),字符串(“hello world”、“DDD”),金額(¥50、$50),地址(深圳市南山區(qū)科技園)它們都是一個(gè)值,這個(gè)值有什么特點(diǎn)呢,固定不變,表述一個(gè)具體的概念。對(duì)象又是什么?一切皆為對(duì)象,是對(duì)現(xiàn)實(shí)世界的抽象,用來(lái)描述一個(gè)具體的事物。那值對(duì)象=值+對(duì)象=將一個(gè)值用對(duì)象的方式進(jìn)行表述,來(lái)表達(dá)一個(gè)具體的固定不變的概念

所以了解值對(duì)象,我們關(guān)鍵要抓住關(guān)鍵字——。

2.值的特征

1就是代表數(shù)字1,“Hello DDD”就是一個(gè)固定字符串,“¥50”就是表示人民幣50元。假設(shè)你手上有一沓鈔票,我們?nèi)コ匈?gòu)物的時(shí)候,很顯然我們會(huì)根據(jù)面額去付款,不會(huì)拿20元當(dāng)50元花,也不會(huì)把美元當(dāng)人民幣花,畢竟¥50≠$50。那對(duì)于鈔票來(lái)說(shuō),我們?cè)趺醋R(shí)別它們,無(wú)非就是鈔票上印刷的數(shù)字面額和貨幣單位。你可能會(huì)說(shuō)了,每張鈔票上都印有編號(hào),就算同樣面額的毛爺爺,那它也不一樣。這個(gè)陳述,我竟然無(wú)言以對(duì)。但我只想問(wèn)你,你平時(shí)購(gòu)物付款,是用編號(hào)識(shí)別面額的???編號(hào)顯然是銀行關(guān)心的事,與我們無(wú)關(guān)。
我們這里提到的數(shù)字面額、貨幣單位和編號(hào),除此之外還有發(fā)行日期,其實(shí)都是鈔票的基本特征,在coding中我們會(huì)根據(jù)場(chǎng)景選擇性的對(duì)某些特征以屬性的形式加以抽象。而在我們?nèi)粘OM(fèi)的場(chǎng)景下,顯然編號(hào)和發(fā)行日期這兩個(gè)特征我們可以直接忽略不計(jì)。

從上面這個(gè)例子我們可用總結(jié)出值的特征:

  1. 表示一個(gè)具體的概念

  2. 通過(guò)值的屬性對(duì)其識(shí)別

  3. 屬性判等

  4. 固定不變

3.案例分析

購(gòu)物網(wǎng)站都會(huì)維護(hù)客戶收貨地址信息來(lái)進(jìn)行發(fā)貨處理,一個(gè)地址信息一般主要包含省份、城市、區(qū)縣、街道、郵政編碼信息。

如果要讓我們?cè)O(shè)計(jì),我們肯定噼里啪啦就把代碼寫下來(lái)了:

    /// <summary>
    /// 地址