I know what I know,I'll sing what I said,We come and we go ...
--I Know What I Know,paul simon
相對于分歧較少的靜態DomainModel結構,DomainModel的動態特征一直是撲朔迷離,讓人捉摸不定。以至于出現了很多爭論,分歧在哪里呢?如果我們把DomainModel整個動態特征看作一個集合,那么,各種爭論的分歧就在于“該集合該如何分配到對象上?”。
在Rebecca Wirfs-Brock的《對象設計》中,提出了OO三種可選的控制風格:集中式、分散式和委托式。
集中式:這是過程式程序遺傳的產物。系統中存在兩類分工明確的對象,分別模擬結構化編程風格的“算法”和“數據”。在算法對象周圍是一群僅僅持有信息的數據對象。聰明的算法對象根據需要向數據對象請求數據,處理得到的數據,向數據對象寫入處理結果。應用邏輯的控制權完全由算法對象掌握,算法對象實質上是事必躬親的控制對象。集中式的一個變種,是多個控制對象共同承擔應用邏輯,這等價于功能分解。這種模式的優點在于,通過考察少數聰明的控制對象就可以弄清楚應用邏輯。然而,把動態特征集合,放入少量控制對象,要比放入較多智能對象復雜。另外,結構化編程風格面臨的問題依然存在,由于數據對象被多個控制對象使用,處理該數據對象的方法,被分散到很多類中,不同數據對象間持有信息的一致性,通過控制對象間接維護,要做到“單點維護”并不容易。 如果想在數據對象間移動持有信息,將變得困難,因為需要同時維護很多關聯的控制對象。
分散式:這是相對集中式的另外一個極端。動態特征集合被均勻的分散到了每一個對象。沒有哪個對象比其他的更聰明。應用邏輯嚴格按照對象間的關聯來驅動完成,各對象僅僅同它關聯的對象打交道。好比一塊由大量齒輪組成的機械表。集中式的優點正是分散式的缺點,要弄清楚應用邏輯,需要跟蹤大量對象間的請求/響應。
委托式:介于上述兩者之間,動態特征集合被層次化的分配到各對象中。控制者的職責被弱化為協調者,協調者比控制者需要知道的要少。數據對象由于承擔了部分動態特征,也“聰明”起來,數據對象也充當起協調自身內部關系的角色。協調者只需要協調其他協調者和聰明起來的數據對象。除了層次上的區別外,他們都可以看作協調者。層次的出現,意味著可以在不同的層次理解應用邏輯,給任務劃分提供了合適的界限。對子層次細節的忽略,保證了在系統變化時不會涉及過多對象。當然同集中式相比,需要考察更多不同層次的對象,單個應用邏輯不是非常直觀。
我認為DomainModel的控制風格,應采用“委托式”。Model的各部分如同人體的細胞和組織,都略帶智能,有明顯的分工,協作完成任務。 當然,這里面還有很多問題需要仔細考慮。
--I Know What I Know,paul simon
相對于分歧較少的靜態DomainModel結構,DomainModel的動態特征一直是撲朔迷離,讓人捉摸不定。以至于出現了很多爭論,分歧在哪里呢?如果我們把DomainModel整個動態特征看作一個集合,那么,各種爭論的分歧就在于“該集合該如何分配到對象上?”。
在Rebecca Wirfs-Brock的《對象設計》中,提出了OO三種可選的控制風格:集中式、分散式和委托式。
集中式:這是過程式程序遺傳的產物。系統中存在兩類分工明確的對象,分別模擬結構化編程風格的“算法”和“數據”。在算法對象周圍是一群僅僅持有信息的數據對象。聰明的算法對象根據需要向數據對象請求數據,處理得到的數據,向數據對象寫入處理結果。應用邏輯的控制權完全由算法對象掌握,算法對象實質上是事必躬親的控制對象。集中式的一個變種,是多個控制對象共同承擔應用邏輯,這等價于功能分解。這種模式的優點在于,通過考察少數聰明的控制對象就可以弄清楚應用邏輯。然而,把動態特征集合,放入少量控制對象,要比放入較多智能對象復雜。另外,結構化編程風格面臨的問題依然存在,由于數據對象被多個控制對象使用,處理該數據對象的方法,被分散到很多類中,不同數據對象間持有信息的一致性,通過控制對象間接維護,要做到“單點維護”并不容易。 如果想在數據對象間移動持有信息,將變得困難,因為需要同時維護很多關聯的控制對象。
分散式:這是相對集中式的另外一個極端。動態特征集合被均勻的分散到了每一個對象。沒有哪個對象比其他的更聰明。應用邏輯嚴格按照對象間的關聯來驅動完成,各對象僅僅同它關聯的對象打交道。好比一塊由大量齒輪組成的機械表。集中式的優點正是分散式的缺點,要弄清楚應用邏輯,需要跟蹤大量對象間的請求/響應。
委托式:介于上述兩者之間,動態特征集合被層次化的分配到各對象中。控制者的職責被弱化為協調者,協調者比控制者需要知道的要少。數據對象由于承擔了部分動態特征,也“聰明”起來,數據對象也充當起協調自身內部關系的角色。協調者只需要協調其他協調者和聰明起來的數據對象。除了層次上的區別外,他們都可以看作協調者。層次的出現,意味著可以在不同的層次理解應用邏輯,給任務劃分提供了合適的界限。對子層次細節的忽略,保證了在系統變化時不會涉及過多對象。當然同集中式相比,需要考察更多不同層次的對象,單個應用邏輯不是非常直觀。
我認為DomainModel的控制風格,應采用“委托式”。Model的各部分如同人體的細胞和組織,都略帶智能,有明顯的分工,協作完成任務。 當然,這里面還有很多問題需要仔細考慮。
安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢】