2008年4月7日 星期一

N07 設計的製程(8)──提供不同範圍的流程Method

雖說Component只提供動作方法,讓系統定義各自使用Component的流程方法是最有彈性的作法,但是使用Component的流程也無可避免地會因為大多系統的使用方法都相同而必須抽取到元件庫的狀況。

系統對於列印的要求定義了一個方法printData(),內部的分解動作是進紙closeInserter()、列印print()、退紙closeInserter(),這三個動作是Component提供的基本方法。後來發現printData()是所有系統對印表機的共同功能需求,因此將集合數個列印動作的printData()放置到Component。請注意此時Component已經帶有了流程方法。

再更進一步在分析系統時又發現:即使列印是把三個動作集合在一起,但是如果接下來還要在同一張紙上接著印其他資料時是不需要退紙的,因此在原有的printData()加上列印後要不要退紙的參數。我們可以發現,Component帶有流程方法後就增加了設計的複雜度。

在流程方法裡的每個動作,使用者都有可能決定要不要做?該怎麼做?所以設計時也必須要同時考量是否要提出參數供使用者決定;但是如果呼叫時每次都設定一大堆參數又相對地比較難使用,所以同時要提供參數較少的預設的使用方法。有時的需求又會要把數個較小的流程方法集中在一個較大範圍的流程方法裡使用。

Component加上流程Method時將會增加許多設計的複雜度,切記要完全遵守OCP設計原則來設計。

沒有留言:

張貼留言