2008年4月5日 星期六

N05 Component設計要恪守OCP設計原則

Component是基於抽取共用原則所抽取的Package層級物件,一旦標記為共用則表示每個Component Method都會在未知數量的系統被未知數量的程式所呼叫,我們可以想像如果Component Interface Method的定義改變時(例如原來沒有傳回值現在改為傳回boolean),跟著而來的會是大量修改與測試的動作。

處理所有共用部分的最高指導原則就遵守OCP設計原則:Open for Extension, Close for Change。對於原有的方法要努力讓它保持不變,如果內部的作法有所改變就試著在內部程式消化掉,永遠讓方法的使用維持著原來的定義;如果改變無法在內部程式消化而勢必影響到外部的使用,那就就另外定義一個新的Component Interface Method提供給新的需求使用。

單純目標的動作改變的機會不多,大部分的改變發生在流程裡,尤其是改變動作順序或增減動作之類的。也因為動作內部隱含的邏輯極少變化,所以它們是比較適合開放為reuse的部分,這也是一般Component Interface Method定義的方向。流程控制著動作方法使用的順序與方式,因為每個系統操作Component的需要都不一樣,所以會在Use Case實作方法的邏輯裡處理;不過還是建議針對一個Component的操作邏輯另行在系統裡拉出一個對應的地方放置。

使用Third Party Component時若擔心其他公司改版造成的影響,可以幫它加一個Wrapper Class把Component封裝在裡面,讓改變只影響Wrapper的內部作法而不致於擾亂系統的使用。如此將可以更放心地使用其他已經經過測試的好用Component。

沒有留言:

張貼留言