轉 介面濫用問題
我們知道,大家提倡面向介面程式設計,但凡事都有個度,當濫用,那麼面向介面完全流於形式。
一.首先,我們先講一下面向約定程式設計。
企業程式設計中,都有一定的專案分層程式設計規範,如前臺與後臺邏輯之間的聯絡通過定義介面來完成。
正如我們平時使用的 MVC三層模形,service層,dao層很多都使用介面,那麼新來者肯定也要遵守規範,在這三層使用介面。
就是大家約定成俗都使用介面而已。但請確記,你這不是面向介面程式設計,而是面向約定程式設計.
為什麼這樣說呢,請後面聽我道來。
如果有如下幾個特點,那麼面向介面程式設計是流於形式的。
1. 定義的介面沒有經過大腦設計
沒有考慮是否有多實現,完全遵從於大家都是這樣使用,那麼可以確認,你現在是面向約定程式設計。
2. 介面方法過多
精心設計的介面,介面方法一般比較精簡,才可能有多個實現類。而我們平時的業務介面,如果沒有將不變及需要變化的介面分離,通通塞在一個大的介面類中,即使有多實現,這種結構也是不合理的,再次確認這種介面完全是遵照某種約定。
3. 是否符合面向介面的目的
使用介面的目的是"定義一個介面,可以有多個實現",因為你有可能連這個目的都不符合。
舉一個例子
1。如我們有一個 UserDao介面,及一個IbatisUserDaoImpl實現,如果我們有跨資料庫的使用需求(同時支援mysql,oracle),根據ibatis實際的使用需求,我們其實是不會有多個IbatisUserDaoImpl實現的,
因為實際的效果是,我們通過同一個實現類,只需要在執行查詢時路由至不同的sqlmap及dataSource就行了,而一般不會做 IbatisOracleUserDaoImpl及IbatisMysqlUserDaoImpl這種實現方式。所以說你是使用ibatis的話,一般也是沒有必要使用介面的。
2。如果你定義的介面UserDao,那麼實現類的名稱為 IbatisUserDaoImpl,HibernateUserDaoImpl,那麼也是有問題的,既然已經選擇的一個技術框架(Ibatis或者Hibernate),一般不會出來切換技術實現的需求,跨資料庫倒比較實際,如MysqlUserDao,HibernateUserDao.
二.撇開擴充套件性,那使用介面又有啥好處呢?
1. 通過介面比較容易瀏覽所有的介面方法,即沒有繁雜的實現程式碼,更易於看懂
2. 介面不能例項化,避免使用者直接例項化後使用(類就有這種問題,直接例項化使用往往是錯誤的)
以上兩個好處,也有足夠理由支援我們使用介面。
三.那麼我們應該怎麼做?
1。除了面向約定使用的介面,其它的業務邏輯程式碼,如果沒有必要使用介面的就不要使用介面,減少類的數量(太多類看著也很累人的)
2。如果定義的介面方法過多,重新審視一下,是否應該改進設計
如果介面的不同實現處理了有相同規則但完全不同的業務,考慮用介面。
如果不同實現處理了相同的事情,但只是拿新的實現替換了舊的實現,建議不要使用介面,直接將原來的實現覆蓋即可。
介面的最簡單初衷是要將“做什麼”和“怎麼做”進行分離
相關文章
- xxl-job濫用netty導致的問題和解決方案Netty
- 採用ODBC介面訪問MySQL指南 (轉)MySql
- 針對網路安全及濫用問題,Twitter推出一系列舉措
- 避免單例濫用單例
- 不要濫用IT規劃
- 不要濫用懶載入
- 介面設計問題
- 用 JMeter 做複雜介面測試遇到的問題JMeter
- 有關介面測試的用例設計問題
- Testing on the Toilet:不要濫用MockMock
- iOS開發小貼士—APP介面跳轉卡死問題iOSAPP
- 解決Xmanager登陸介面亂碼問題的方法 [轉]
- orm.Fielder介面問題ORM
- 介面的使用注意問題
- 用 Httprunner3 做介面測試遇到了問題,求解~HTTP
- 用SQL解決有向圖問題(轉)SQL
- ERP系統應用問題分析(轉)
- apache web 中的CGI應用問題(轉)ApacheWeb
- IP頁面訪問域名介面問題
- 被濫用的 GUI 設計模式GUI設計模式
- 一個濫用程式碼的案例
- WPF-理解被濫用的MVVMMVVM
- 用VB編寫COM+應用時碰到問題? (轉)
- 呼叫微信介面token的問題
- this問題 以及 webstorm 除錯介面WebORM除錯
- iOS介面資料解析問題iOS
- webService 介面方法過載問題Web
- Jive中介面卡問題
- 斑竹你好,jive的介面問題
- 濫用Accessibility service自動安裝應用
- 訪問jboss上EJB遠端介面問題
- 中國ERP行業應用問題概述 (轉)行業
- 再談應用程式的例項問題 (轉)
- 用VC訪問Sybase資料庫(用Sybase提供的ct-library介面) (轉)資料庫
- React新文件:不要濫用effect哦React
- React新文件:不要濫用Ref哦~React
- 維護有感3 -- 被濫用的synchronizedsynchronized
- 介面自動化如何處理介面依賴問題