2008年3月25日 星期二

M19 讓Interface裡的一對一對應無所不在

在與大陸程式設計人員合作的時候,發現他們對於Interface有著相當好的概念。有幾次想要偷懶,認為同一個Package裡的Class直接使用就好,還有在Method上想直接用一個getProperty()來省略一堆的getter方法時,他們都會提出要一個一個全部應定義好的建議。

他們的觀念是正確的。每一個物件的存在,都應該至少有一個對應的Interface來描述該物件在某個方面所應該要具有的功能;而每一個獨立的功能,也同樣應該要有一個專屬該功能對應的方法。我已經有很多次將多對一的對應,切割為一對一的經驗了,每次把一堆粘黏在一起的想法重新釐清都很辛苦,所以現在都試著努力讓自己的設計與系統的功能形成一對一的對應。

一對一的對應相對的影響,會造成Java File的數量增加不少。在前面的那個專案裡,我們一共宣告了113個Interface、40個Abstract Class與81個Class,這數目與一般直接宣告Interface與Class的作法(通常會有是一個對一個,81個Interface與81個Class)多了幾十個Interface與Abstract Class。

或許有人認為檔案數的增加相對地更難理解系統,但是採用直覺式寫法的原有系統即使說明一週還是難以上手,而我現在有把握只有說明半天就能讓新進維護人員有超過前者的系統概念。能夠快速地讓新進人員上手,都是因為所有物件有依照規律放在該在的位置、同時處理它該處理的功能。

註:一對一的對應,指一個Interface只為了一個目的而存在,一個Method只為了一個動作而存在。雖然定義上較為繁瑣,但是易於切割與使用;有時候也會將幾個固定動作的Method以特定邏輯包裝為組合型的Method,不過這應該特別註明包裝了哪些動作Method。

沒有留言:

張貼留言