2008年6月1日 星期日

Q09 努力的方向(1)──定義各階層的應有元件

在作程式設計時,實在是有太多人只以最表層的執行結果作為目標,全然沒想過抽取相同子流程、避免相同程式碼與動作封裝到適當元件的方向。以這種方向作出的系統,在較公用的方法裡通常堆滿了不知從哪裡來、為什麼而做的程式,到最後只能使用一堆if-else來避免修改時影響到其他部分;同時千辛萬苦堆積好的系統,如果下個專案需要的只是基本框架的時候,根本沒法快速地把上層的部分移除乾淨,造成明明要用系統的一部分卻無法做到。

完成目標首先要切割出逐步進行的分解動作,接著把動作定位到系統三度空間的確定位置,最後把該空格內的類似目的的動作各自封裝到元件裡(分層負責);經由這樣的設計將系統的經驗收集在可以重覆使用的元件,使用時只應該找到唯一一個可以使用的動作方法(絕對重用)。元件提供給上一層次的是固定的動作,上一層次要如何使用這些動作則需另外再定義一組流程來達成目標(動靜分離);如果與實際需求有差距,就需要找另一個實作同一介面的元件或是另外定義一個作法來滿足需求(靈活替換)。

在下面的系統組成方塊圖裡,從專案Use Case的起點開始,找出達成需要的各個Module,每個Module的方法再往下串到不同層次上的元件動作,這一切的集合正是完成這個Use Case的所需的全部。為了避免多個動作被壓平為一個方法而形成無法抽離的困境,會努力將系統設計為不管從哪個方向切開都能夠再度使用(在切開的同時也要能看出切開部分所有的關聯)。

沒有留言:

張貼留言