面向接口編程

面向接口編程綜述

在系統(tǒng)分析和架構(gòu)中躬柬,每個(gè)層次不是直接向上提供服務(wù)(即不是直接實(shí)例化在上層中)焦蘑,而是通過(guò)定義一組接口查乒,僅向上層暴露接口功能弥喉,
上層對(duì)下層的依賴,僅僅是接口的依賴而不是具體類的依賴玛迄。

這樣做的好處是顯而易見(jiàn)的由境,首先對(duì)系統(tǒng)靈活性有大的好處,當(dāng)下層需要改變的時(shí)候蓖议,只要接口和接口的功能不變虏杰,上層不需要做任何修改,甚至可以在不改動(dòng)上層代碼時(shí)將下層整個(gè)替換掉勒虾,

就像我們將一個(gè)WD的60G硬盤換成一個(gè)希捷的160G的硬盤纺阔,計(jì)算機(jī)其他地方不用做任何改動(dòng),而是把原硬盤拔下來(lái)修然、新硬盤插上就行了笛钝,因?yàn)橛?jì)算機(jī)其他部分不依賴具體硬盤,而只依賴一個(gè)IDE接口愕宋,只要硬盤實(shí)現(xiàn)了這個(gè)接口玻靡,就可以替換上去。從這里看掏婶,程序中的接口和現(xiàn)實(shí)中的接口極為相似啃奴,所以我一直認(rèn)為,接口(interface)這個(gè)詞用的真是神似!

另外關(guān)于架構(gòu)的分層相關(guān)的描述

在.NET平臺(tái)上雄妥,比較經(jīng)典的分層架構(gòu)是三層架構(gòu)最蕾,從下到上依次是:數(shù)據(jù)訪問(wèn)層依溯、業(yè)務(wù)邏輯層、表示層瘟则。各層職責(zé)如下:

數(shù)據(jù)訪問(wèn)層:負(fù)責(zé)與數(shù)據(jù)源交互黎炉,完成數(shù)據(jù)訪問(wèn)等一系列操作。

業(yè)務(wù)邏輯層:完成與系統(tǒng)業(yè)務(wù)有關(guān)的邏輯操作醋拧。

表示層:負(fù)責(zé)與用戶交互慷嗜、呈現(xiàn)數(shù)據(jù)等一切與系統(tǒng)表示有關(guān)的操作。

剛才我們說(shuō)過(guò)丹壕,分層架構(gòu)下是向下依賴的(不考慮依賴倒置)庆械,也就是業(yè)務(wù)邏輯層要調(diào)用數(shù)據(jù)訪問(wèn)層完成與數(shù)據(jù)源有關(guān)的操作,而表示層調(diào)用業(yè)務(wù)邏輯層完成業(yè)務(wù)邏輯工作菌赖。但是缭乘,表示層對(duì)數(shù)據(jù)訪問(wèn)層是沒(méi)有依賴的。

在這個(gè)架構(gòu)中琉用,每一層都不是一個(gè)類堕绩,而是一個(gè)類族,例如邑时,在一個(gè)CMS系統(tǒng)中奴紧,數(shù)據(jù)訪問(wèn)層可能會(huì)有一系列的類,分別負(fù)責(zé)用戶晶丘、文章黍氮、評(píng)論等業(yè)務(wù)實(shí)體的數(shù)據(jù)訪問(wèn)操作,而業(yè)務(wù)邏輯層也一樣铣口。

如果我們直接依賴滤钱,即業(yè)務(wù)邏輯層實(shí)例化數(shù)據(jù)訪問(wèn)層的類,表示層再實(shí)例化業(yè)務(wù)邏輯層的類脑题,會(huì)造成強(qiáng)耦合件缸。如果我想把數(shù)據(jù)庫(kù)從SQLServer換成MySQL,則要改變整個(gè)業(yè)務(wù)邏輯層代碼叔遂,這是個(gè)不好的設(shè)計(jì)他炊。(還記得“開(kāi)放-關(guān)閉”原則嗎)

所以,一般的做法是已艰,為數(shù)據(jù)訪問(wèn)層和業(yè)務(wù)邏輯層分別定義一族接口痊末,業(yè)務(wù)邏輯層不依賴具體的數(shù)據(jù)訪問(wèn)層,而是僅依賴數(shù)據(jù)訪問(wèn)層的接口族哩掺,表示層也一樣凿叠,依賴業(yè)務(wù)邏輯層的接口族。

如此一來(lái),當(dāng)要更換數(shù)據(jù)庫(kù)時(shí)盒件,我們就不必改寫整個(gè)業(yè)務(wù)邏輯層蹬碧,因?yàn)闃I(yè)務(wù)邏輯層里根本沒(méi)有任何數(shù)據(jù)訪問(wèn)層中的具體類,而全是通過(guò)接口實(shí)現(xiàn)的炒刁。

在.NET中恩沽,只要配合配置文件和反射機(jī)制,再運(yùn)用Abstract Factory設(shè)計(jì)模式翔始,就可以實(shí)現(xiàn)“依賴注入”罗心,即在不改動(dòng)代碼的情況下根據(jù)配置選擇相應(yīng)的層次組件。這樣城瞎,我們就可以為不通數(shù)據(jù)庫(kù)分別實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層渤闷,也可以編寫ORM的數(shù)據(jù)訪問(wèn)層,甚至是基于XML的全谤,只要實(shí)現(xiàn)了數(shù)據(jù)訪問(wèn)層接口族肤晓,就可以和業(yè)務(wù)邏輯層無(wú)縫連接,從而極大提高了軟件的靈活性和可維護(hù)性认然。當(dāng)然要更改業(yè)務(wù)邏輯層也是一樣。

具體可以參考:
http://www.cnblogs.com/leoo2sk/archive/2008/04/14/1151569.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漫萄,一起剝皮案震驚了整個(gè)濱河市卷员,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腾务,老刑警劉巖毕骡,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異岩瘦,居然都是意外死亡未巫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門启昧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叙凡,“玉大人,你說(shuō)我怎么就攤上這事密末∥找” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵严里,是天一觀的道長(zhǎng)新啼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)刹碾,這世上最難降的妖魔是什么燥撞? 我笑而不...
    開(kāi)封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上物舒,老公的妹妹穿的比我還像新娘辆布。我一直安慰自己,他們只是感情好茶鉴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布锋玲。 她就那樣靜靜地躺著,像睡著了一般涵叮。 火紅的嫁衣襯著肌膚如雪惭蹂。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天割粮,我揣著相機(jī)與錄音盾碗,去河邊找鬼。 笑死舀瓢,一個(gè)胖子當(dāng)著我的面吹牛廷雅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播京髓,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼航缀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了堰怨?” 一聲冷哼從身側(cè)響起芥玉,我...
    開(kāi)封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎备图,沒(méi)想到半個(gè)月后灿巧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡揽涮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年抠藕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒋困。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盾似,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出家破,到底是詐尸還是另有隱情颜说,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布汰聋,位于F島的核電站门粪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏烹困。R本人自食惡果不足惜玄妈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拟蜻,春花似錦绎签、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至搔扁,卻和暖如春爸舒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稿蹲。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工扭勉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苛聘。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓涂炎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親设哗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子唱捣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容