走在架構師的大道上 Jack.Wang's home

          Java, C++, linux c, C#.net 技術,軟件架構,領域建模,IT 項目管理 Dict.CN 在線詞典, 英語學習, 在線翻譯

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks
           

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

          摘要:反模式作為一種新視角模式,在表述和指導開發上與傳統設計模式不同,他先提出模式的反面案例,而后在給出重構方案,這在指導開發人員(尤其是新手)不無裨益。本系列筆記為個人學習總結,也希望沒有接觸過反模式的朋友們一起學習進步。

          正文:

          1.   胖球產生的原因:

          胖球反模式本身是很簡單,但可能由于疏忽,后期沒加以控制,系統急于上線等等原因而出現了。

          胖球反模式通過描述一個或幾個類不斷的膨脹,以至吞食掉整個面向對象架構。一般胖球的出現是由于一個類壟斷了處理過程,而其他的類只是數據的封裝體。

          雖然OOA&D 提出了很久,但有些人的思維還停留在過程式的設計上,他們習慣把過程和數據分開,而不是OO中把融合了方法和數據的對象進行職責分割。胖球可能是需求分析不當的結果,也可能是系統不斷演進,迭代,新功能和新人員的加入而使部分構件異常龐大而沒有進行有效的職責分割,于是某個類成了構件或整個系統的主宰。

          總的來說,出現此種問題的原因主要是缺乏面向對象架構,缺乏對架構的實施和干預以及過程式需求的錯誤引導。

          2.   癥狀和后果:

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

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

          (3)           單個控制器類和幾個簡單的數據對象聯系在一起。

          (4)           缺乏面向對象的設計,一個控制器類幾乎封裝了所有的應用功能。

          (5)           控制器類通常過于復雜,無法復用和測試。

          (6)           把這么個大類加載如內存中的代價可能會很高。

          3.   重構方案:

          胖球重構的方法很簡單,就是把一些行為重新分配到某些封裝了數據的對象上,并對對象之間的關系從新調整(構件和連接件關系調整)。

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

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

          (3)         移除所有的“遠耦合”或者說冗余的、間接的聯系。

          (4)         最后,移除所有的瞬時聯系。

          總之,我們把一個控制器類變成了一個協調器類,讓開始的數據類擴充一些處理邏輯,數據類在協調類的指導下進行操作,這也只是職責的遷移。

          胖球反模式有兩種形式為行為形式和數據形式,所謂行為形式及所有的處理過程都包含在一個對象中,它與系統中的大多數對象進行交互;數據形式的對象則包含的數據被系統的大部分其他對象所使用。





          本博客為學習交流用,凡未注明引用的均為本人作品,轉載請注明出處,如有版權問題請及時通知。由于博客時間倉促,錯誤之處敬請諒解,有任何意見可給我留言,愿共同學習進步。
          posted on 2008-09-23 14:39 Jack.Wang 閱讀(2086) 評論(0)  編輯  收藏 所屬分類: 架構師篇
          主站蜘蛛池模板: 云安县| 泰州市| 乌鲁木齐市| 黄浦区| 克东县| 吕梁市| 汝南县| 山阴县| 咸丰县| 拜城县| 霍山县| 九江县| 绿春县| 怀柔区| 梅河口市| 武城县| 古丈县| 社旗县| 宜昌市| 巧家县| 淅川县| 瑞金市| 潞城市| 门头沟区| 香格里拉县| 南川市| 泰顺县| 论坛| 洛南县| 长沙市| 收藏| 佛冈县| 西安市| 肇州县| 红安县| 临夏县| 呼伦贝尔市| 衡南县| 武宣县| 合川市| 汉中市|