<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    badqiu

    XPer
    隨筆 - 46, 文章 - 3, 評論 - 195, 引用 - 0
    數(shù)據(jù)加載中……

    接口濫用問題

    我們知道,大家提倡面向接口編程,但凡事都有個度,當(dāng)濫用,那么面向接口完全流于形式。

    一.首先,我們先講一下面向約定編程。

    企業(yè)編程中,都有一定的項目分層編程規(guī)范,如前臺與后臺邏輯之間的聯(lián)系通過定義接口來完成。

    正如我們平時使用的 MVC三層模形,service層,dao層很多都使用接口,那么新來者肯定也要遵守規(guī)范,在這三層使用接口。

    就是大家約定成俗都使用接口而已。但請確記,你這不是面向接口編程,而是面向約定編程.

    為什么這樣說呢,請后面聽我道來。

    如果有如下幾個特點,那么面向接口編程是流于形式的。

    1. 定義的接口沒有經(jīng)過大腦設(shè)計

    沒有考慮是否有多實現(xiàn),完全遵從于大家都是這樣使用,那么可以確認,你現(xiàn)在是面向約定編程。

    2. 接口方法過多

    精心設(shè)計的接口,接口方法一般比較精簡,才可能有多個實現(xiàn)類。而我們平時的業(yè)務(wù)接口,如果沒有將不變及需要變化的接口分離,通通塞在一個大的接口類中,即使有多實現(xiàn),這種結(jié)構(gòu)也是不合理的,再次確認這種接口完全是遵照某種約定。

    3. 是否符合面向接口的目的

    使用接口的目的是"定義一個接口,可以有多個實現(xiàn)",因為你有可能連這個目的都不符合。

    舉一個例子

    1。如我們有一個 UserDao接口,及一個IbatisUserDaoImpl實現(xiàn),如果我們有跨數(shù)據(jù)庫的使用需求(同時支持mysql,oracle),根據(jù)ibatis實際的使用需求,我們其實是不會有多個IbatisUserDaoImpl實現(xiàn)的,

    因為實際的效果是,我們通過同一個實現(xiàn)類,只需要在執(zhí)行查詢時路由至不同的sqlmap及dataSource就行了,而一般不會做 IbatisOracleUserDaoImpl及IbatisMysqlUserDaoImpl這種實現(xiàn)方式。所以說你是使用ibatis的話,一般也是沒有必要使用接口的。

    2。如果你定義的接口UserDao,那么實現(xiàn)類的名稱為 IbatisUserDaoImpl,HibernateUserDaoImpl,那么也是有問題的,既然已經(jīng)選擇的一個技術(shù)框架(Ibatis或者Hibernate),一般不會出來切換技術(shù)實現(xiàn)的需求,跨數(shù)據(jù)庫倒比較實際,如MysqlUserDao,HibernateUserDao.

    二.撇開擴展性,那使用接口又有啥好處呢?

    1. 通過接口比較容易瀏覽所有的接口方法,即沒有繁雜的實現(xiàn)代碼,更易于看懂

    2. 接口不能實例化,避免使用者直接實例化后使用(類就有這種問題,直接實例化使用往往是錯誤的)

    以上兩個好處,也有足夠理由支持我們使用接口。


    三.那么我們應(yīng)該怎么做?

    1。除了面向約定使用的接口,其它的業(yè)務(wù)邏輯代碼,如果沒有必要使用接口的就不要使用接口,減少類的數(shù)量(太多類看著也很累人的)

    2。如果定義的接口方法過多,重新審視一下,是否應(yīng)該改進設(shè)計

    posted on 2010-10-11 17:33 badqiu 閱讀(2139) 評論(2)  編輯  收藏

    評論

    # re: 接口濫用問題  回復(fù)  更多評論   

    個人建議:
    如果接口的不同實現(xiàn)處理了有相同規(guī)則但完全不同的業(yè)務(wù),考慮用接口。

    如果不同實現(xiàn)處理了相同的事情,但只是拿新的實現(xiàn)替換了舊的實現(xiàn),建議不要使用接口,直接將原來的實現(xiàn)覆蓋即可。
    2010-10-11 21:11 | @joe

    # re: 接口濫用問題  回復(fù)  更多評論   

    接口的濫用也讓我感到非常的反感,在我們的業(yè)務(wù)邏輯中大部分都是因為接口而接口,忘了定義接口的最簡單初衷是要將“做什么”和“怎么做”進行分離
    2010-10-12 23:16 | 陳于喆

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 精品久久久久久国产免费了 | 国产免费观看视频| 亚洲成av人片不卡无码| 野花香高清视频在线观看免费| 亚洲精品国产自在久久| 一级毛片大全免费播放| 亚洲综合图色40p| 国产午夜无码片免费| 亚洲人成77777在线播放网站| 亚洲免费一区二区| 亚洲精品无码av人在线观看| 成全在线观看免费观看大全 | 亚洲精品黄色视频在线观看免费资源 | 特黄aa级毛片免费视频播放| 亚洲av无码成人精品区在线播放| 国产精品亚洲片在线花蝴蝶| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲人妖女同在线播放| 日韩高清免费观看| 久久精品国产亚洲AV天海翼| 又粗又硬又黄又爽的免费视频 | 亚洲老妈激情一区二区三区| 99热这里只有精品6免费| 亚洲成av人片在线看片| 国产精品无码免费视频二三区 | 亚洲成无码人在线观看| 成人黄动漫画免费网站视频 | 日本免费精品一区二区三区| 中文字幕亚洲无线码| 99久久99热精品免费观看国产 | 免费在线观看h片| 亚洲欧美日韩中文高清www777| 亚洲av区一区二区三| 免费污视频在线观看| 亚洲色欲色欲www在线播放| 亚洲精品麻豆av| 日韩精品人妻系列无码专区免费| 亚洲人成色77777在线观看| 丁香五月亚洲综合深深爱| 日本三级2019在线观看免费| 免费人成视频在线播放|