由于客戶信息軟件具有上面提到的兩個(gè)特征:一個(gè)是記載客觀事物在某一時(shí)刻的狀態(tài)、一個(gè)是在數(shù)學(xué)規(guī)律的驅(qū)動(dòng)下進(jìn)行狀態(tài)的轉(zhuǎn)換,所以領(lǐng)域模型也相應(yīng)地包含了這兩個(gè)特征。而具有這兩個(gè)特征的信息,我們常常分別稱之為靜態(tài)信息和動(dòng)態(tài)信息。什么是靜態(tài)信息和動(dòng)態(tài)信息呢?舉個(gè)例子,一輛汽車(chē),有四個(gè)車(chē)輪、一個(gè)車(chē)廂。輪胎的直徑和車(chē)廂的外形尺寸是汽車(chē)的靜態(tài)信息。在某一個(gè)時(shí)刻,前輪向左方偏轉(zhuǎn)45度角,偏轉(zhuǎn)了45度角的前輪也是汽車(chē)的靜態(tài)信息。
此外,這輛車(chē)的最高時(shí)速是200千米,這也是汽車(chē)的靜態(tài)信息。 對(duì)于這輛汽車(chē)來(lái)說(shuō),有動(dòng)態(tài)信息嗎?答案是沒(méi)有。也許有人會(huì)問(wèn),如果這輛車(chē)以60千米的時(shí)速向前行駛呢?這是動(dòng)態(tài)信息嗎?我的回答是:不是。想象一下,如果你把椅子從12樓丟下去,椅子會(huì)具有自我狀態(tài)改變的能力嗎?無(wú)論是汽車(chē)還是椅子,它們狀態(tài)的變化,都是在外力的作用下發(fā)生的。我把這種外力,理解為動(dòng)態(tài)信息。外力的大小,決定了狀態(tài)變化的速度,這其中包含了數(shù)學(xué)上的規(guī)律。 這種想法和Martin Fowler是不同的。Martin Fowier認(rèn)為,沒(méi)有行為的對(duì)象不是一個(gè)真正的對(duì)象。這也許是基于他對(duì)對(duì)象這個(gè)概念的理解,換句話說(shuō),他有自己的角度來(lái)建立模型與客觀事物的映射關(guān)系。
而我推薦的客戶信息軟件映射更加直接,例如,一把椅子,它不會(huì)自己添加新的椅子,也不會(huì)自動(dòng)消失(刪除)。椅子對(duì)象就是關(guān)于椅子的信息,所有的信息都是靜態(tài)的。 下面我再舉一個(gè)靜態(tài)信息的例子。 Bruce Eckel在Thinking in Java一書(shū)中提到了一個(gè)電燈泡。記得嗎?這個(gè)電燈泡具有brighten接口。假設(shè),在電燈泡對(duì)象上提供這個(gè)brighten行為是合理的,那么,電燈泡收到了相應(yīng)的消息之后會(huì)如何呢?電燈泡對(duì)象的狀態(tài)應(yīng)該發(fā)生變化——燈絲中通過(guò)的電流會(huì)增大,燈絲發(fā)熱會(huì)更加厲害??墒?,仔細(xì)想想,單獨(dú)考慮電燈泡對(duì)象的狀態(tài)是有問(wèn)題的,因?yàn)殡娋W(wǎng)的電壓波動(dòng)會(huì)造成電流大小的波動(dòng),電燈泡因此會(huì)變得忽明忽暗。這說(shuō)明,如果離開(kāi)了電網(wǎng)電壓這個(gè)因素(靜態(tài)信息),根本無(wú)法正確地設(shè)置電燈泡的參數(shù)(靜態(tài)信息)。為了做出更好的解釋,我們必須假定有一個(gè)數(shù)學(xué)規(guī)律在發(fā)生作用。 我們繼續(xù)看Bruce Eckel的電燈泡隱喻。
在電燈泡對(duì)象的描述中,沒(méi)有說(shuō)明brighten接口中會(huì)做些二次開(kāi)發(fā),但我很愿意猜測(cè)下去。我想客戶信息軟件這個(gè)接口中的實(shí)現(xiàn),應(yīng)該沒(méi)有對(duì)外部對(duì)象的任何依賴,而只是做些修改對(duì)象本身狀態(tài)的工作。為什么這么想呢?