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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

回头再学Asp.net系列--基础篇(六)

發布時間:2025/3/17 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 回头再学Asp.net系列--基础篇(六) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

隨著面向對象分析與設計的發展,一個良好的設計,核心原則之一就是將變化隔離,使得變化部分發生變化時,不變部分不受影響(這也是OCP的目的)。為了做到這一點,要利用面向對象中的多態性,使用多態性后,客戶類不再直接依賴服務類,而是依賴于一個抽象的接口,這樣,客戶類就不能在內部直接實例化具體的服務類。
但是,客戶類在運作中又客觀需要具體的服務類提供服務,因為接口是不能實例化去提供服務的。就產生了“客戶類不準實例化具體服務類”和“客戶類需要具體服務類”這樣一對矛盾。
依賴注入(Dependency Injection),是這樣一個過程:由于某客戶類只依賴于服務類的一個接口,而不依賴于具體服務類,所以客戶類只定義一個注入點。在程序運行過程中, 客戶類不直接實例化具體服務類實例,而是客戶類的運行上下文環境或專門組件負責實例化服務類,然后將其注入到客戶類中,保證客戶類的正常運行。
Setter注入(Setter Injection)是指在客戶類中,設置一個服務類接口類型的數據成員,并設置一個Set方法作為注入點,這個Set方法接受一個具體的服務類實例為參數,并將它賦給服務類接口類型的數據成員。構造注入(Constructor Injection)是指在客戶類中,設置一個服務類接口類型的數據成員,并以構造函數為注入點,這個構造函數接受一個具體的服務類實例為參數,并將它賦給服務類接口類型的數據成員。
上面提到的注入方式,都是客戶類被動接受所依賴的服務類,這也符合“注入”這個詞。不過還有一種方法,可以和依賴注入達到相同的目的,就是依賴獲取。
可以看到,這種方法變被動為主動,使得客戶類在需要時主動獲取服務類,而將多態性的實現封裝到獲取點里面。獲取點可以有很多種實現,也許最容易想到 的就是建立一個Simple Factory作為獲取點,客戶類傳入一個指定字符串,以獲取相應服務類實例。如果所依賴的服務類是一系列類,那么依賴獲取一般利用Abstract Factory模式構建獲取點,然后,將服務類多態性轉移到工廠的多態性上,而工廠的類型依賴一個外部配置,如XML文件。
不過,不論使用Simple Factory還是Abstract Factory,都避免不了判斷服務類類型或工廠類型,這樣系統中總要有一個地方存在不符合OCP的if…else或switch…case結構,這種缺 陷是Simple Factory和Abstract Factory以及依賴獲取本身無法消除的,而在某些支持反射的語言中(如C#),通過將反射機制的引入徹底解決了這個問題

依賴獲取(Dependency Locate)是指在系統中提供一個獲取點,客戶類仍然依賴服務類的接口。當客戶類需要服務類時,從獲取點主動取得指定的服務類,具體的服務類類型由獲取點的配置決定。

轉載于:https://www.cnblogs.com/dubing/articles/2220723.html

總結

以上是生活随笔為你收集整理的回头再学Asp.net系列--基础篇(六)的全部內容,希望文章能夠幫你解決所遇到的問題。

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