2007年9月1日 星期六

D21 令人感到麻煩的設計(6)──解決循環使用的現象

在設計的經驗裡,總是會“不小心”遇到像左圖那樣循環使用的現象,這是需要極力避免的。因為當B改變的時候,要追溯到使用它的A,如果A因為B的改變也作了改變,那麼使用A的B又要再度改變而形成無窮迴圈。

最簡單的解法,就是把A拆成兩個Package,使用B的放在A1,被B使用的集中在A2,這樣就可以讓循環使用的現象變為圖中的單向使用。可是實際遇到的情況大多都因為Package的內聚力過高而無法乾淨地分為兩個Package。

嘗試了幾種有問題的方式後,我提出右圖的解法:在B裡定義一個A2功能的介面(注意:這個介面屬於B),A維持原來使用B的動作,但內部原本要分割成A2的部分使之實作B提供的介面,如此一來A使用B與A實作B都可以是由上往下的使用關係。

沒有留言:

張貼留言