日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面向接口编程详解(三)——模式研究

發布時間:2025/4/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向接口编程详解(三)——模式研究 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通過前面兩篇,我想各位朋友對“面向接口編程”的思想有了一定認識,并通過第二篇的例子,獲得了一定的直觀印象。但是,第二篇中的例子旨在展示面向接口編程的實現方法,比較簡單,不能體現出面向接口編程的優勢和這種思想的內涵。那么,這一篇作為本系列的終結篇,將通過分析幾個比較有深度的模式或架構,解析隱藏其背后的面向接口思想。這篇我將要分析的分別是MVC模式和.NET平臺的分層架構。
????? 這篇的內容可能會比較抽象,望諒解。

1.從MVC開始
MVC簡介:
????? 本文不打算詳細解釋MVC架構,而是把重點放在其中的面向接口思想上。所以在這里,只對MVC做一個簡略的介紹。
????? MVC是一種用于表示層設計的復合設計模式。M、V、C分別表示模型(Model)、View(視圖)、Controller(控制器)。它們的職責如下:
????? 模型:用于存儲應用中的數據及運行邏輯,是應用的實體。
????? 視圖:負責可視部分,用于與用戶交互及呈現數據。視圖只負責顯示,不負責將用戶的操作行為解釋給模型。
????? 控制器:負責將用戶的行為解釋給模型。根據指定的策略和用戶的操作,調用模型的邏輯。

????? 關于三者的關系,我畫了一張圖,大家請看:


????? 它們之間的交互有以下幾種:
????? 1.當用戶在視圖上做任何需要調用模型的操作時,它的請求將被控制器截獲。
????? 2.控制器按照自身指定的策略,將用戶行為翻譯成模型操作,調用模型相應邏輯實現。
????? 3.控制器可能會在接到視圖操作時,指定視圖做某些改變。
????? 4.當模型的狀態發生改變時,將通過某種方式通知視圖。
????? 5.視圖可以從模型獲取狀態,從而改變自己的顯示。

????? MVC介紹完了,那么可能會有人問,我們的主題呢?面向接口思想呢?其實,MVC中處處都存在面向接口的影子。下面,我對其中幾個側面進行解釋。
????? 1.首先我們可以看到,視圖和模型是有直接交互的,也就是上面的4、5兩點。但是有一點可能會讓你吃驚:它們兩個誰也不“認識”誰,即它們相互并不知道對方是做什么的、有什么屬性、有什么方法,但是它們能交互。這是怎么做到的呢?因為它們個各知道對方實現了某一個接口。
????? 此乃面向接口思想一大作用:使相互不認識的類進行交互。這樣做是很有好處的,首先它們之間的耦合度大大降低,其次雙方都可以進行替換,只要實現了相同的接口,就沒有問題。
????? 打個不太恰當的比喻。我們都知道120這個電話號碼,是急救電話。其實120就是個接口,因為當你撥打這個電話時,你不知道那邊是哪所醫院,甚至不知道那邊是不是醫院,你只知道電話那頭的地方可以救人,也可以說實現了IHelp接口。這樣,你通過一個號碼可以說同全部的救人機構聯系起來了,當有緊急事件,接線控制那邊會將你的請求接到最近可用的機構,你就可以最快的得到幫助。
????? 現在我們假設沒有使用面向接口思想,來看看會發生什么恐怖的事情:首先,我家的120號碼是綁定在本市第一人民醫院的,即當我撥打120時,只能撥通第一人民醫院。如果有一天我食物中毒了,急忙撥通了120,但是電話那邊告訴我他們醫院的救護車都派出去了,我問那怎么接通別家醫院的電話,那邊的MM很溫柔的告訴我,讓我打電話給網通公司,然后重新為我布線。于是我吐血而亡……
????? 言歸正傳。這里,我要引入一個設計模式,叫觀察著(Observer)模式。這個模式大約是這樣的:整個模式中有兩種實體:觀察者和被觀察者,它們分別實現一個接口,這里我們姑且叫做IObserver與IObserverSubject。IObserver只有一個方法,例如叫Update,當被觀察者狀態改變時,調用這個方法,用來通知觀察者。IObserverSubject接口有兩個方法,都是供觀察者調用。一個用來將觀察者注冊為此被觀察者的觀察對象,另一個用于將觀察者移除。
????? 一般情況下,一個被觀察者對應多個觀察者。
????? 在MVC中,視圖是觀察者,模型是被觀察者,當模型狀態改變時,調用所有觀察者的Update方法,通知視圖模型有變,視圖在Update方法里寫下響應代碼,完成操作。通過這個方法,視圖和模型就可以在僅依賴接口的情形下進行交互,而不必強耦合,而且在模型不變的情況下,視圖可以隨意替換。(只要實現了IObserver)

????? 2. 在MVC中另一個使用接口的地方就是控制器,這里我要首先引入一個設計模式:策略模式(Strategy)。在MVC中,控制器就使用了這個模式。
????? 剛才我說過,視圖負責與用戶交互,但是,它只負責界面顯示部分,至于當用戶做了某個操作(如單擊某個按鈕)后系統應該怎么反應,視圖并不負責,它只是將這個動作交給控制器,控制器根據內置的策略,將用戶操作翻譯成模型的邏輯。這就是說,同一個視圖、同一種操作,模型可以做出不同的反應,這取決與控制器的內置策略。所以,我們的系統中可以有很多控制器,它們有不同的策略,當視圖希望改變策略時,它可以更換控制器。怎么實現呢?這就需要視圖不能和具體控制器耦合,而是要僅依賴一個控制器接口(如IController),并聚合一個IController的實例。當希望更改策略時,可以在系統運行時動態更換Controller,這就是策略模式的實現。

????? 關于MVC的接口思想就先介紹到這里。其實MVC中還有很多地方用到面向接口,由于本文不是專門介紹MVC或設計模式的,所以對用到的模式沒有做詳解,而是把重點放在其中的面向接口思想上。如果沒有設計模式的基礎,讀上文可能會有些困難,希望各位見諒!我打算在以后專門寫文章來解析MVC。

2..NET平臺下分層架構的面向接口思想
????? 我們知道,在做大一點的系統應用時(特別是B/S架構),比較好的方法是分層架構。所謂分層架構,是指將系統從職責上分成若干層,每層各司其職,上層依賴下層完成操作。
????? 在.NET平臺上,比較經典的分層架構是三層架構,從下到上依次是:數據訪問層、業務邏輯層、表示層。各層職責如下:
????? 數據訪問層:負責與數據源交互,完成數據訪問等一系列操作。
????? 業務邏輯層:完成與系統業務有關的邏輯操作。
????? 表示層:負責與用戶交互、呈現數據等一切與系統表示有關的操作。

????? 剛才我們說過,分層架構下是向下依賴的(不考慮依賴倒置),也就是業務邏輯層要調用數據訪問層完成與數據源有關的操作,而表示層調用業務邏輯層完成業務邏輯工作。但是,表示層對數據訪問層是沒有依賴的。
????? 在這個架構中,每一層都不是一個類,而是一個類族,例如,在一個CMS系統中,數據訪問層可能會有一系列的類,分別負責用戶、文章、評論等業務實體的數據訪問操作,而業務邏輯層也一樣。如果我們直接依賴,即業務邏輯層實例化數據訪問層的類,表示層再實例化業務邏輯層的類,會造成強耦合。如果我想把數據庫從SQLServer換成MySQL,則要改變整個業務邏輯層代碼,這是個不好的設計。(還記得“開放-關閉”原則嗎)所以,一般的做法是,為數據訪問層和業務邏輯層分別定義一族接口,業務邏輯層不依賴具體的數據訪問層,而是僅依賴數據訪問層的接口族,表示層也一樣,依賴業務邏輯層的接口族。如此一來,當要更換數據庫時,我們就不必改寫整個業務邏輯層,因為業務邏輯層里根本沒有任何數據訪問層中的具體類,而全是通過接口實現的。在.NET中,只要配合配置文件和反射機制,再運用Abstract Factory設計模式,就可以實現“依賴注入”,即在不改動代碼的情況下根據配置選擇相應的層次組件。這樣,我們就可以為不通數據庫分別實現數據訪問層,也可以編寫ORM的數據訪問層,甚至是基于XML的,只要實現了數據訪問層接口族,就可以和業務邏輯層無縫連接,從而極大提高了軟件的靈活性和可維護性。當然要更改業務邏輯層也是一樣。
????? 如果說,前面的例子都是從微觀視角討論接口,那么,這個例子則從宏觀視角展現了面向接口編程的內涵和優勢。很抱歉在這里不能對這個架構深入講解,有興趣的朋友可以參考微軟的官方示例.NET PetShop4。(但是請注意,這個示例中業務邏輯層沒有定義接口族,而是強耦合于表示層中,這可能是因為考慮到在這個系統中業務邏輯沒有更改的可能。另外由于是個示例,不是真正的B2C系統,所以業務邏輯層很簡單。)

????? 好了,本系列文章就到這里。希望各位朋友通過這三篇文章,能對“面向接口編程”有一定的了解。當然,我只是起到一個拋磚引玉的作用,其真正的內涵和精髓,還需要各位從實踐中慢慢認識。還有,就是面向接口思想不是孤立的,它和設計模式等內容都是面向對象大系中的精華,而且是相互滲透、相互聯系的。其實,很多設計模式就是面向接口思想的體現。我們應該把這些放在一起學習,從而真正提供自己的面向對象思考能力和實戰能力。

轉載于:https://www.cnblogs.com/kimma/archive/2008/09/08/1287058.html

總結

以上是生活随笔為你收集整理的面向接口编程详解(三)——模式研究的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色片地址 | 五月婷婷六月婷婷 | 国产无遮挡免费观看视频网站 | 日本黄色一区二区 | 少女忠诚电影高清免费 | 娇妻被肉到高潮流白浆 | 亚洲性猛交 | 欧美片一区二区 | 日本公妇乱淫免费视频一区三区 | 日本激情电影 | 中文字幕第15页 | 五十路在线观看 | 亚洲丝袜av| 另类一区二区 | 99国产精品久久久久久久久久久 | 欧美一级一区二区 | 大地资源二中文在线影视观看 | 黄色草逼网站 | 奇米影视一区二区三区 | 生活片一级片 | 短篇山村男同肉耽h | 波多野结衣 一区 | 91网站观看| 日本久久一区 | 91久久婷婷 | 日产精品一区二区 | 欧美一级片一区二区 | 精品国产影院 | 98视频在线 | 一区二区在线免费观看 | 日本理伦片午夜理伦片 | 色乱码一区二区三区 | 奇米精品一区二区三区在线观看一 | 亚洲色婷婷一区二区三区 | 亚洲在线免费观看 | 精品久久免费视频 | 黄色大片中文字幕 | 午夜爱爱毛片xxxx视频免费看 | 91九色在线观看 | 捆绑束缚调教 | 成人国产av一区二区三区 | 91在线免费视频 | 亚洲啪av永久无码精品放毛片 | 久久成人乱码欧美精品一区二区 | 麻豆网站免费观看 | 18成人在线观看 | 国产精品一页 | 久久久人| 国产精品欧美在线 | 日批av| 欧美大肥婆大肥bbbbb | 国产成人无码AA精品区 | 成人av男人的天堂 | 国产精品无码白浆高潮 | 国产青草视频在线观看 | 色妞干网| kendra lust free xxx| 国产一级爱c视频 | 日韩欧美理论片 | 三级中文字幕 | 777亚洲 | 亚洲五月婷| 色图视频 | 亚洲av成人精品一区二区三区 | 国产裸体网站 | 懂色av蜜臀av粉嫩av喷吹 | www.热久久 | 香蕉视频国产在线观看 | 亚洲24p | 生活片一级片 | 五月丁香久久婷婷 | 丰满人妻翻云覆雨呻吟视频 | www国产亚洲精品久久网站 | 日本一区不卡在线观看 | 日本国产一区二区三区 | 成人av18| 国外av网站 | 黑人巨大精品欧美一区二区免费 | 四虎少妇做爰免费视频网站四 | 亚洲丝袜天堂 | a级一片| 久久久久久久久久国产精品 | 亚洲免费影院 | 黑人操欧美人 | 日韩精品视频一区二区 | 黄色片在哪看 | 精品视频久久久久 | 日韩aⅴ在线观看 | 国产免费视频一区二区三区 | 97国产成人 | www.国产精品.com | 不卡影院 | 国产乱码精品1区2区3区 | 不卡在线一区二区 | 操伊人| 日本精品免费一区二区三区 | 一区二区三区在线电影 | 少女与动物高清版在线观看 | 新x8x8拨牐拨牐永久免费影库 |