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

.NET 2.0的Provider模式

第一部分: Provider模式統(tǒng)覽

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

MSDN上能找到關(guān)于此模式在.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設(shè)計(jì)模式基本上是由GOF的兩個(gè)設(shè)計(jì)模式溶合而成的:strategyabstract factory。API定義好,其功能通過(guò)strategy模式變異而來(lái),是“可插(拔)”的,而功能被加載進(jìn)內(nèi)存則是通過(guò)大致地一個(gè)abstractfactory設(shè)計(jì)模式而實(shí)現(xiàn)的。

以下是此部分基本概要,以及它們?nèi)绾位ソ弧?/span>

1.  API Class:這是一個(gè)通過(guò)靜態(tài)方法定義和暴露所需功能的類,在API Class中并沒(méi)有具體的實(shí)現(xiàn)。此類保持一個(gè)對(duì)Application ProviderBase類的引用,這個(gè)base類會(huì)對(duì)API中的功能進(jìn)行基本的包裝(Wrap)。

 

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


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

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

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

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

D:我們有一個(gè)默認(rèn)Provider的引用,此Provider已被包裝。

 

一旦實(shí)例化,所有對(duì)這個(gè)API類的請(qǐng)求都會(huì)一個(gè)一個(gè)地轉(zhuǎn)給默認(rèn)的Provider

2. Provider Base Class:這是一個(gè)內(nèi)部抽象類,位于System.Configuration.Provider命名空間,用于定義一個(gè)Provider。Initialize()方法用于從配置文件中獲取必要的信息來(lái)構(gòu)建具體的Provider。我們?cè)谧约簩?shí)現(xiàn)這個(gè)抽象類的時(shí)候要記的重寫Initialize()方法。


3.  Application ProviderBase:這是一個(gè)從ProviderBase類繼承來(lái)的一個(gè)抽象類,同時(shí)也是API類的一個(gè)“鏡像”,通過(guò)在API中所暴露的方法來(lái)為父類定義抽象方法并在父類中實(shí)現(xiàn)。

在我們的應(yīng)用程序中我們把這個(gè)類叫做“StoreProvider”,請(qǐng)注意這個(gè)Store Provider是如何定義在Store類中已有的方法,同時(shí)從ProviderBase類繼承。

 

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

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

 


這些東西看起來(lái)有點(diǎn)暈,不過(guò)當(dāng)你看到一個(gè)請(qǐng)求傳給Store類后再轉(zhuǎn)交給一個(gè)StoreProvider的引用,由具體的CornerStoreProvider去完成時(shí),你就知道這幾個(gè)“齒輪”是如何配合的了。

 

 

第二部分:細(xì)節(jié),細(xì)節(jié),還是細(xì)節(jié)~

現(xiàn)在我們已經(jīng)大概了解了一下基礎(chǔ)了。好,再讓我們把程序深入一些。首先我們構(gòu)建一個(gè)API用于和商店以及商店中的貨物(或是叫產(chǎn)品)互交。

看看這個(gè)貨物(或是叫產(chǎn)品,下同)類:


這個(gè)類并不是Provider模式的一部分,我們只是用它來(lái)把數(shù)據(jù)搬進(jìn)搬出而已。我們?yōu)槊總€(gè)貨物定義名字和批發(fā)價(jià)。每個(gè)商店自己的貨物都有自己不同的售價(jià),所以我們還要計(jì)算這些貨物的零售價(jià)。我也添加了一個(gè)靜態(tài)方法來(lái)得到所有可用的貨物:GetProducts() Initialize()

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


StoreProvider暴露了我們?cè)缦忍岬降某橄箢愔械姆椒?/span>

CornerStoreProvider是我們Store Provider類的具體實(shí)現(xiàn)。

VendingMachineStoreProviderStore Provider類的另一具體實(shí)現(xiàn)。


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

 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>

第三部分:執(zhí)行

為了使用我們的API,我們要對(duì)靜態(tài)的Store類進(jìn)行方法調(diào)用,在本次示例中如果我們默認(rèn)的provider存有產(chǎn)品,我們可以通過(guò)API類(Store)提供的方法使用默認(rèn)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技術(shù).NET 2.0的Provider模式,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲性无码AV久久成人 | 欲插爽乱浪伦骨 | 精品国产成人系列 | 日韩精品人成在线播放 | 热热久久超碰精品中文字幕 | 蜜芽TV影院在线视频 | 久久综合丁香激情久久 | 无遮掩H黄纯肉动漫在线观看星 | 变态露出野外调教 | 一二三四韩国免费观看 | 久久视频在线视频观看精品15 | 爽爽影院免费观看 | 日本人HD18HD18 | 伊人久在线 | 永久精品视频无码一区 | 久草精品在线 | 免费三级现频在线观看 | 娇女的呻吟亲女禁忌h16 | 久久这里只有精品1 | 大陆极品少妇内射AAAAAA | 蜜臀AV浪潮99国产麻豆 | 儿子日母亲B好爽 | 国产精品自产拍在线观看网站 | 亚洲无码小格式 | 国精产品一区一区三区有 | 国产线精品视频在线观看 | 久久综合狠狠综合久久综合88 | 亚洲精品影院久久久久久 | 三级网站视频在线观看 | 入室强伦女教师被学生 | 好吊射视频988gaocom | 亚洲免费观看在线视频 | 日本2021免费一二三四区 | 暖暖日本免费播放 | 久久亚洲精品2017 | 国产成人综合高清在线观看 | 亚洲午夜AV久久久精品影院色戒 | 女人高潮被爽到呻吟在线观看 | 午夜免费体验30分 | 蜜桃成熟时2电影免费观看d | 国产黄A片在线观看永久免费麻豆 |