走在架構(gòu)師的大道上 Jack.Wang's home

          Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項(xiàng)目管理 Dict.CN 在線詞典, 英語(yǔ)學(xué)習(xí), 在線翻譯

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks
           

          反模式讀書筆記之胖球(—)

          摘要:反模式作為一種新視角模式,在表述和指導(dǎo)開發(fā)上與傳統(tǒng)設(shè)計(jì)模式不同,他先提出模式的反面案例,而后在給出重構(gòu)方案,這在指導(dǎo)開發(fā)人員(尤其是新手)不無(wú)裨益。本系列筆記為個(gè)人學(xué)習(xí)總結(jié),也希望沒有接觸過(guò)反模式的朋友們一起學(xué)習(xí)進(jìn)步。

          正文:

          1.   胖球產(chǎn)生的原因:

          胖球反模式本身是很簡(jiǎn)單,但可能由于疏忽,后期沒加以控制,系統(tǒng)急于上線等等原因而出現(xiàn)了。

          胖球反模式通過(guò)描述一個(gè)或幾個(gè)類不斷的膨脹,以至吞食掉整個(gè)面向?qū)ο蠹軜?gòu)。一般胖球的出現(xiàn)是由于一個(gè)類壟斷了處理過(guò)程,而其他的類只是數(shù)據(jù)的封裝體。

          雖然OOA&D 提出了很久,但有些人的思維還停留在過(guò)程式的設(shè)計(jì)上,他們習(xí)慣把過(guò)程和數(shù)據(jù)分開,而不是OO中把融合了方法和數(shù)據(jù)的對(duì)象進(jìn)行職責(zé)分割。胖球可能是需求分析不當(dāng)?shù)慕Y(jié)果,也可能是系統(tǒng)不斷演進(jìn),迭代,新功能和新人員的加入而使部分構(gòu)件異常龐大而沒有進(jìn)行有效的職責(zé)分割,于是某個(gè)類成了構(gòu)件或整個(gè)系統(tǒng)的主宰。

          總的來(lái)說(shuō),出現(xiàn)此種問(wèn)題的原因主要是缺乏面向?qū)ο蠹軜?gòu),缺乏對(duì)架構(gòu)的實(shí)施和干預(yù)以及過(guò)程式需求的錯(cuò)誤引導(dǎo)。

          2.   癥狀和后果:

          (1)           單個(gè)類擁有大量的屬性或操作。

          (2)           單個(gè)類中封裝了異類的、不相關(guān)的屬性和操作集。

          (3)           單個(gè)控制器類和幾個(gè)簡(jiǎn)單的數(shù)據(jù)對(duì)象聯(lián)系在一起。

          (4)           缺乏面向?qū)ο蟮脑O(shè)計(jì),一個(gè)控制器類幾乎封裝了所有的應(yīng)用功能。

          (5)           控制器類通常過(guò)于復(fù)雜,無(wú)法復(fù)用和測(cè)試。

          (6)           把這么個(gè)大類加載如內(nèi)存中的代價(jià)可能會(huì)很高。

          3.   重構(gòu)方案:

          胖球重構(gòu)的方法很簡(jiǎn)單,就是把一些行為重新分配到某些封裝了數(shù)據(jù)的對(duì)象上,并對(duì)對(duì)象之間的關(guān)系從新調(diào)整(構(gòu)件和連接件關(guān)系調(diào)整)。

          (1)         確定代表契約的關(guān)系操作和屬性集合,也就是把相關(guān)的屬性和方法歸類。

          (2)         尋找這些根據(jù)契約的到了集合的“自然的家”,并把它們遷移過(guò)去。

          (3)         移除所有的“遠(yuǎn)耦合”或者說(shuō)冗余的、間接的聯(lián)系。

          (4)         最后,移除所有的瞬時(shí)聯(lián)系。

          總之,我們把一個(gè)控制器類變成了一個(gè)協(xié)調(diào)器類,讓開始的數(shù)據(jù)類擴(kuò)充一些處理邏輯,數(shù)據(jù)類在協(xié)調(diào)類的指導(dǎo)下進(jìn)行操作,這也只是職責(zé)的遷移。

          胖球反模式有兩種形式為行為形式和數(shù)據(jù)形式,所謂行為形式及所有的處理過(guò)程都包含在一個(gè)對(duì)象中,它與系統(tǒng)中的大多數(shù)對(duì)象進(jìn)行交互;數(shù)據(jù)形式的對(duì)象則包含的數(shù)據(jù)被系統(tǒng)的大部分其他對(duì)象所使用。





          本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請(qǐng)注明出處,如有版權(quán)問(wèn)題請(qǐng)及時(shí)通知。由于博客時(shí)間倉(cāng)促,錯(cuò)誤之處敬請(qǐng)諒解,有任何意見可給我留言,愿共同學(xué)習(xí)進(jìn)步。
          posted on 2008-09-23 14:39 Jack.Wang 閱讀(2086) 評(píng)論(0)  編輯  收藏 所屬分類: 架構(gòu)師篇
          主站蜘蛛池模板: 安义县| 桑日县| 子洲县| 阿勒泰市| 商河县| 凯里市| 嘉荫县| 鲁山县| 郴州市| 孟村| 政和县| 肥西县| 崇明县| 乌兰浩特市| 得荣县| 沅陵县| 龙山县| 于都县| 云林县| 黄陵县| 清水河县| 望谟县| 罗山县| 长岭县| 马龙县| 乡宁县| 高陵县| 浮山县| 崇阳县| 兰坪| 泽普县| 莆田市| 公安县| 雅江县| 静乐县| 万全县| 淮北市| 泗水县| 英山县| 青浦区| 松江区|