Posted on 2005-12-27 01:24
canonical 閱讀(998)
評論(2) 編輯 收藏 所屬分類:
設計理論
敏捷思想的流行使得很多人對可擴展設計產生了一種懷疑的態度。這有幾方面的原因,一方面是J2EE平臺本身提供的分布式機制等技術因素很容易誘導你定義不
必要的擴展需求,第二是基于目前的技術手段對于程序結構的分解仍然有著很大限制,具體的程序實現中往往會引入某種強制依賴,削弱了潛在的可擴展性,第三則
是設計者本身對于技術和業務的把握不夠深入,在考慮設計的可擴展性時經常做出錯誤的判斷。但是一個只滿足當前需求的系統一般不是個好系統,也很難在多次迭
代生命周期后繼續生存。XP(extreme
programming)強調簡單化,其實質在于簡單的東西可以在未來被重構(refactor),從而適應未知的變化,它本身并不排斥可擴展設計。
從基本的常識出發,我們都知道現在應該為將來做些事情,準備些資本。可擴展設計的價值觀不應是現在解決將來的問題,而是尋求未來發展之后現在的解是否仍然
部分有效,是否仍然可以部分被繼承。即我們考慮的不是將未來的解納入到現在的體系中,而是考慮現在的解在未來的體系中的位置。不是在現在如何支持我們所預
想到的幾種未來的擴展方式,而是無論未來如何變化,怎樣才能保證現在工作的有效性。這里所關注的重點是現在而不是將來!面對演化我們所能采取的最好的策略
就是盡量有所積累,盡量不放棄我們的過去,而不是把寶押在對未來的準確預測上。一個厚重的設計往往在后期會因為預料的太多反而在遭遇未預料到的變化時不知
所措,結果造成系統整體架構的失效,必須做更多的工作打補丁來使得它勉強工作。象EJB這樣distribution
ready的技術現在已經公認有過度設計之嫌,因為這些已經ready的特性一般并不會被應用但是我們卻不得不為這些無用的特性付出代價。
可擴展設計所依賴的基本原則之一是IoC(Inversion of Control)。IoC是目前輕量級容器(lightweight
container)的核心設計思想,但其實它的應用遠不止在輕量級容器這一領域?;贗oC設計,大量的知識(依賴)被剝離出業務對象本身,對象對于其
生存環境和應用場景的假設大大減弱,而我們的期望正在于無論未來的應用環境如何變化,只要提供必要的知識,業務對象就能工作??梢哉f,IoC是可擴展性的
一種基本要求。
可擴展設計所依賴的另一個原則是連續性(continuous),
這可比IoC要復雜和深刻的多了。如果說現代設計的核心觀念是演化(evolution), 那么在我們的思想中演化到底有著什么樣的圖景?
至少需要一個方向加上一條連續的途徑,evolution才能發生。在級列設計中,一個簡單的系統架構需要能夠scale
up,而一個復雜層次上的系統架構也需要能夠以優雅的方式scale down。這種變化是自然的因為它們是連續的。