除了變一切都不能長久。 ---雪萊
小的時候特別羨慕高年級的同學能用鋼筆寫字。有時候用鉛筆到墨水瓶裡面佔一下,除了能留下一灘墨跡外,寫出來的還是鉛筆字。不過,用鉛筆寫字有一個好處,就是寫錯了可以用橡皮擦掉重寫。這也是在有了鋼筆,可以用鋼筆寫作業之後才知道的。
在寫程式的時候,經常要設定一些變數,什麼局部變數,全域變數。和常量相比,變數有一個好處,在需要計算的地方使用,可以隨時修改參與運算的值。就有點象鉛筆寫的字需要的時候可以擦掉重寫一樣,在需要改變參與計算值的時候不必修改程式中的計算運算式了。
鉛筆寫的字對於變化的適應要比鋼筆好。變數對變化的適應要比常量強。
如果一個系統可以快速適應使用者需求的變化,象修改鉛筆字一樣修改不適合的功能,象變數一樣快速適應使用者對系統的新需求,這個系統就是一個對變化的適應性非常強的系統。一個對變化適應性非常強的系統有什麼好處呢?還是舉一個例子。
在剛剛用鋼筆寫字的時候,老師總是要求用方格本寫,不能有錯字,不能寫錯了劃掉,寫錯了就要整頁重寫。如果在剛剛寫第一行就寫錯了字,那就撕掉重寫,反正寫的也不多。如果寫最後一行出現錯字,那還是要撕掉重寫,不過那樣就很不合算了。對於一個項目或者系統,如果在項目初期或者軟體剛剛投入使用的時候發現一些問題或者不準確的需求,作一些更改成本可能還低一些。如果到了項目的後期或者系統已經投入使用甚至已經用了一段時間,再發現問題或者提出新的修改需求,對於那些對變化適應性很低的系統那等同於推翻重做!如果不推翻重做,而是在原有代碼的基礎上修改,付出的代價有可能是原來項目的幾倍甚至幾十倍。
一個系統的變化主要有三個層面:業務層面、系統架構層面和程式實現層面。
1、業務層面:針對與業務層面的需求變化有很多的解決技術,比如工作流程管理系統就是為了適應使用者商務程序的變化,利用可視化的流程定製工具,根據使用者業務的變化通過配置動態修改系統的流程模型滿足使用者的需求。在SCA架構中,一個SCA Domain類似一個工作流程管理系統中的流程定義。SCA Domain是SCA架構中粒度最大的組件模型,通過裝配的方式可以提供業務功能的實現。SCA Domain由任意個Composite組件組成,Composite提供了基本的業務功能和邏輯,SCA Domain通過裝配把Composite組合成符合業務需要的邏輯。當業務發生變化,SCA Domain可以快速響應,以適應業務發生的變化。
2、架構層面:SCA從字面理解就是面向組件的架構,所以在架構層面體現的是標準的架構模型。SCA的本質就是通過架構層為業務層和實現層提供組件的靈活性、可插入性、可替換性的機制。在架構層Composte組件可以將已有的組件納入到新的組件之中,使之成為新組件的一部分,為新組件提供部分功能。這樣做的好處有:
A、新組件訪問已有的組件只能通過唯一的方法,就是已有組件提供的services
B、新組件對已有組件的使用是一種黑箱複用,已有組件的內部細節對新組件不可見。
C、這種複用支援封裝。
D、複用低偶合,依賴少。
E、每個新組件可以專註與一個任務,責任清晰。
F、複用可以在運行期間內動態進行,組件可以動態引用其他的實現完成相同或者不同的系統行為。
G、可以通過promote選擇對外提供的服務,增強可替換和可選擇的機制。
當商務程序變化或者系統效能需求帶來的變化,都可以通過替換、選擇和組合的方式來增加(擴充)和改變系統的行為,當然有些需要實現層面提供必要的支援才能完成。
3、實現層面:通過component的支援,可以為架構層提供各種形式的語言和規範的實現。可以發揮各種語言、架構、規範的優勢,最大限度的使用他們的最佳特性。component就象是一個適配器,將任何一種component支援的實現(如果沒有可以自己實現)接入composite中,為架構層提供實現。
三個不同層面對變化的適應能力為系統提供了靈活可靠的對業務需求和系統效能需求帶來的變化的適應能力。業務層的裝配描述、架構層的提升和組合機制以及實現層對各種不同類型語言架構的支援帶來的不同實現是系統隨需而變有利的保障。