天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

.NET 2.0的Provider模式

第一部分: Provider模式統覽

Provider設計模式是在.NET 1.1 framework中被首次介紹到,特別是在ASP.NET快速入門中,以及后來在ASP.NET Whidbey中作為membership management provider API被正式化。它的主要目的在于為一個API進行定義和實現的分離。這樣就通過核心功能的靈活性和易于修改的特點使得API具有靈活性。

MSDN上能找到關于此模式在.NET 1.1 Framework的更多信息:

http://msdn.microsoft.com/library/default.ASP?url=/library/en-us/dnASPNET/html/ASP02182004.ASP

http://msdn.microsoft.com/library/default.ASP?url=/library/en-us/dnASPNET/html/ASP02182004.ASP

Provider設計模式基本上是由GOF的兩個設計模式溶合而成的:strategyabstract factoryAPI定義好,其功能通過strategy模式變異而來,是“可插(拔)”的,而功能被加載進內存則是通過大致地一個abstractfactory設計模式而實現的。

以下是此部分基本概要,以及它們如何互交。

1.  API Class:這是一個通過靜態方法定義和暴露所需功能的類,在API Class中并沒有具體的實現。此類保持一個對Application ProviderBase類的引用,這個base類會對API中的功能進行基本的包裝(Wrap)。

 

本文中的API Class是一個商店(Store)我們可以從中買東西,如Coke(可樂)Snickers(譯者:不知道這是啥。),還有在吃Snicker和喝Coke時所要的diet pills(減肥藥)。


我們的類包括以下幾部分:

A:我們有基本的API用于存放貨物AddProductToStock,還有如GetProductPriceGetProductStockCount以及RemoveProductFromStock等核心方法。

B:我們有個叫Initialize()的方法用于從系統配置文件中加載已有的具體商店。

C:我們有所有可用Provider的引用。

D:我們有一個默認Provider的引用,此Provider已被包裝。

 

一旦實例化,所有對這個API類的請求都會一個一個地轉給默認的Provider

2. Provider Base Class:這是一個內部抽象類,位于System.Configuration.Provider命名空間,用于定義一個ProviderInitialize()方法用于從配置文件中獲取必要的信息來構建具體的Provider。我們在自己實現這個抽象類的時候要記的重寫Initialize()方法。


3.  Application ProviderBase:這是一個從ProviderBase類繼承來的一個抽象類,同時也是API類的一個“鏡像”,通過在API中所暴露的方法來為父類定義抽象方法并在父類中實現。

在我們的應用程序中我們把這個類叫做“StoreProvider”,請注意這個Store Provider是如何定義在Store類中已有的方法,同時從ProviderBase類繼承。

 

4. Concrete ProviderApplication Provider Base中所定義的方法在這個類中實現。Concrete Provider為了從配置文件中讀取信息而會重寫Initialize()方法

這四個類是實現Provider模式所必須的。其它的類則是用來定義一個Provider能提供什么東西(在本文中,是一個Product類)或是在以后為這些對象提供服務的工具類,或是用于管理程序配置文件。

 


這些東西看起來有點暈,不過當你看到一個請求傳給Store類后再轉交給一個StoreProvider的引用,由具體的CornerStoreProvider去完成時,你就知道這幾個“齒輪”是如何配合的了。

 

 

第二部分:細節,細節,還是細節~

現在我們已經大概了解了一下基礎了。好,再讓我們把程序深入一些。首先我們構建一個API用于和商店以及商店中的貨物(或是叫產品)互交。

看看這個貨物(或是叫產品,下同)類:


這個類并不是Provider模式的一部分,我們只是用它來把數據搬進搬出而已。我們為每個貨物定義名字和批發價。每個商店自己的貨物都有自己不同的售價,所以我們還要計算這些貨物的零售價。我也添加了一個靜態方法來得到所有可用的貨物:GetProducts() Initialize()

Store類定義了核心方法給我們(客戶端),從storeproducts體現。


StoreProvider暴露了我們早先提到的抽象類中的方法

CornerStoreProvider是我們Store Provider類的具體實現。

VendingMachineStoreProviderStore Provider類的另一具體實現。


Initialize()是每一個具體類都要實現的一個有趣方法。這個方法存在于ProviderBase中,但由ProvidersHelper調用。以下方法重寫ProviderBase中的Initialize并從配置文件的節點中讀取所需要的信息:

 1 xml version="1.0" encoding="utf-8" ?>
 2 
 3 <configuration>
 4 
 5   <configSections>
 6 
 7     <section name="store" type="ProviderSample.StoreProviderConfigurationSection,
 8 
 9       ProviderSample, Version=1.0.0.0,
10 
11       Culture=neutral,PublicKeyToken=null" />
12 
13   configSections>
14 
15   <store defaultProvider="CornerStoreProvider">
16 
17     <providers>
18 
19       <add name="VendingMachineStoreProvider"
20 
21            type="VendingMachineStoreProvider"
22 
23            Coke="0.75"
24 
25            Snickers="0.5"
26 
27            Diet_Pills="1.25"
28 
29            >add>
30 
31       <add name="CornerStoreProvider"
32 
33            type="CornerStoreProvider"
34 
35            Coke="0.70"
36 
37            Snickers="0.65"
38 
39            Diet_Pills=".80"
40 
41            >add>
42 
43     providers>
44 
45   store>
46 
47 configuration>

第三部分:執行

為了使用我們的API,我們要對靜態的Store類進行方法調用,在本次示例中如果我們默認的provider存有產品,我們可以通過API類(Store)提供的方法使用默認provider

 1 // Get some coke
 2 
 3 Product p1 = Product.GetProduct("Coke");
 4 
 5  
 6 
 7 // find out the cost
 8 
 9 double cost = Store.GetProductPrice(p1);
10 
11  
12 
13 // get it from the store
14 
15 Store.RemoveProductFromStock(p1);  // remove from inventory  

NET技術.NET 2.0的Provider模式,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本一在线中文字幕 | 日本护士喷水 | 熟女人妻AV五十路六十路 | 偷上邻居熟睡少妇 | 亚洲国产日韩a精品乱码 | 琪琪色在线播放 | 久久受www免费人成_看片中文 | 特级黑人三人共一女 | 日韩a在线看免费观看视频 日韩a视频在线观看 | 麻豆精品无码久久久久久久久 | 日韩欧美一区二区三区免费观看 | 处女座历史名人 | 无码爽死成人777在线观看网站 | 国产AV国产精品国产三级在线L | 视频成人永久免费下载 | 97国产成人精品视频 | 九九热最新视频 | 久久久精品免费视频 | 亚洲青青青网伊人精品 | 久久综合狠狠综合狠狠 | 久久国产综合精品欧美 | 91黄色影院 | 三级全黄的视频 | 日韩欧美一区二区三区在线视频 | 漂亮妈妈中文字幕版 | 精品亚洲一区二区三区在线播放 | 久久只有这里有精品4 | 午夜精品久久久久久久爽牛战 | 入室强伦女教师被学生 | 国产精品久久久久久久久齐齐 | 性欧美videos俄罗斯 | 女人操男人 | 成人亚洲视频 | 色欲天天婬色婬香影院 | 美女视频黄a视频全免费网站色窝 | 失禁h啪肉尿出来高h | 亚洲一区免费看 | 97超碰免费人妻中文 | 97国产揄拍国产精品人妻 | 中文字幕成人免费高清在线 | 永久免费的无码中文字幕 |