2011-02-14

為什麼要用 interface 與 implementation?

主要目的就是減少實做關聯(reduce coupling)。

舉例來說,存取使用者資料的 dao 名為 UserDaoImpl,如果整個系統都是直接使用 UserDaoImpl 的話,問題有二:

第一點,不利測試,當為了測試系統邏輯而非資料庫操作時,仍必須連線資料庫,為了測試必須準備測試資料且效能也不好。
如果整個系統是使用 UserDao 這樣的 interface 的話,可以在測試時,提供一個如 UserDaoTestImpl 這樣的模擬實做,就不用真的去連資料庫。


第二點,無法快速更換實做,當資料庫要從 MySql 換成 Oracle 時,必須將整個系統用到 UserDaoMySqlImpl 都換成 UserDaoOracleImpl。
如果整個系統是使用 UserDao 這樣的 interface 的話,只要在設定檔裡切換實做版本即可。

當然也可以考慮用繼承的方式取代 interface,但是會有單一繼承的困擾。

沒有留言:

張貼留言