2007年7月25日 星期三

C13 小小的改變,大大的費時

公司的系統需要使用其他廠商的硬體來擴充功能,因而要我設計一個元件來對應這些功能。需求是在畫面上操作某些動作時,把資料變成XML字串送給其他系統,回應的結果再顯示到畫面上。

一開始沒想太多,只把送出的XML作成Model物件,Controller裡就直接在需要顯示的地方使用View的物件(公司的View經過包裝,使用自行開發的API),只用了幾天的時間很快地把功能做好並測試完成。過了幾天,主管說這個元件希望可以單獨銷售使用,View的部分希望可以同時支援標準的swing,為了做出這個功能我花了四個小時把Controller裡的View拆出並定義Interface。

直接把Controller與View分開並定義介面所花的時間應該只比原先直接使用的設計多一個小時,但是我花了整整四個小時做這個動作。而且在拆解的過程裡程式碼大量地被分割,連帶地所有功能全部要再重測與修正,總共用了六個小時左右,實在是得不償失。

類似的經驗在維護列印的元件上。當初寫這個功能的人看需求只要使用一款印表機,所以在列印的邏輯裡直接使用印表機物件;現在因專案的緣故必須支援三款不同的印表機,為了重覆使用印表邏輯,我必須花很大的功夫拆出邏輯與印表機功能物件並在其中定義介面。當然拆解後重新測試元件全部功能的動作還是免不了的。

當你多遇上幾次這種重拆重測的事,浪費許多時間重做之後,如果你是那個負責拆解與維護的人,相信你會更明白為每一個層次定義介面的重要性。

沒有留言:

張貼留言