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