2007年8月18日 星期六

D07 Component的設計(2)──Controller & Action之一

先用我經手過的印表模組的例子說明Controller與Action的差別。

在Interface上定義了print(String data),只要把列印字串傳進Component就會在印表機印出資料。但是印表機的實際列印最多會是由進紙、列印、退紙三個動作組合的,根據印表機的不同又有列印前是否自動進紙與列印後是否自動退紙的些微差異。

根據上面的描述,應該把印表機的動作(進紙、列印、退紙)定義為三個ComponentActionInterface的方法並加以實作,再於上一層ComponentController做一個對應印表機的實作,在print(String data)依印表機特性決定如何呼叫ComponentActionInterface。最後在Implementation裡做好變換的機制,依實際連接的印表機生成對應的Controller與Action就能夠正常使用。

千萬不要把Controller寫成與印表機一對一的對應,印表機可是有數百種機型的。以列印動作來講,列印的動作是絕對要執行到的,其間的差異就只有是否自動進紙與是否自動退紙,總計四種組合。只要設定印表機機型對應的控制方式,不就可以省卻非常多的控制程式碼了嗎?

沒有留言:

張貼留言