在brighten接口的實現(xiàn)中包含了對于外部對象的依賴,那么很糟糕,客觀事物之間的關(guān)系將完全失去控制。試想,電燈泡接收到變亮消息的時候要去檢查電網(wǎng)的電壓,電力軟件開發(fā)過程中,先要搭建軟件框架,然后才能決定自己的參數(shù)(靜態(tài)信息)嗎?不,這很難讓人接受。
另外,如果對象中真的包含依賴外部對象的行為,換句話說,按照對象可以接收的請求都應(yīng)該封裝在對象中的邏輯,那么,在保險業(yè)務(wù)中的一個代理人,將會有數(shù)量龐大的接口。在這種情況下,代理人接受到請求,不僅僅是修改自己的狀態(tài),還要去通知其他對象去計算保單的保費,去計算自己的傭金。這些原本應(yīng)該是外部的數(shù)學(xué)規(guī)律(牽涉眾多對象的靜態(tài)信息和動態(tài)信息),卻被收進了代理人對象的行為集。我認為這種依賴是不合理的。
如果對象的行為不依賴于其他對象呢?那也沒有什么太大的意義。對象本身狀態(tài)(靜態(tài)信息)的變化,應(yīng)該由外部環(huán)境(數(shù)學(xué)規(guī)律)來決定。電網(wǎng)的電壓和電燈泡自身的功率,決定了電燈泡的亮度。如何決定呢?需要通過動態(tài)信息(數(shù)學(xué)規(guī)律)。 靜態(tài)信息是客觀事物的一個狀態(tài),
這很好理解。而理解動態(tài)信息則比較困難一點。在我看來,電力軟件開發(fā)的動態(tài)信息是對行為的認識,是具有驅(qū)動狀態(tài)轉(zhuǎn)換能力的數(shù)學(xué)規(guī)律。聽上去有點抽象,對嗎?舉個例子,我們想想駕駛這個行為。 駕駛行為是動態(tài)的、有規(guī)律的。當駕駛摩托車時,需要左腳換擋、右腳剎車、右手控制油門把手;當駕駛手動擋轎車時,需要左腳控制離合器、右腳控制油門和剎車、右手換擋,油門把手或油門腳踏用力多少、決定了機動車的速度,而剎車腳踏用力多少決定了剎車距離的遠近。
我們看到,電力軟件開發(fā)的動態(tài)信息(駕駛行為)離不開靜態(tài)信息(機動車)的參與。和靜態(tài)信息不同,動態(tài)信息關(guān)注的是如何使用手腳,以及用力的大小。 除了手腳的方位和力量等靜態(tài)信息之外,對于駕駛行為來說,手腳的協(xié)調(diào)是屬于數(shù)學(xué)規(guī)律的范疇、是動態(tài)信息,而手腳的方位和力量屬于行為中的靜態(tài)信息。 綜上所述,我認為,如果一定要區(qū)分,那么項目協(xié)同軟件的對象應(yīng)該有兩種:一種是只具有靜態(tài)信息的對象,也就是通常所說的實體對象,或者說是Martin Fowler所謂的貧血對象;一種是同時具有靜態(tài)和動態(tài)信息的對象,它嘗試描述驅(qū)動靜態(tài)信息狀態(tài)變化的數(shù)學(xué)規(guī)律,例如,駕駛行為,它可以使摩托車、轎車、飛機、輪船等的狀態(tài)發(fā)生變化。