.NET 2.0的Provider模式

作者: 極地銀狐.NET  來源: 博客園  發布時間: 2009-03-17 15:25  閱讀: 9471 次  推薦: 0   原文鏈接   [收藏]  
 
摘要:本文全面地介紹了Prodive模式的概念以及應用,對于理解Provider模式的理解起到了很大的幫助
[1] Provider模式統覽
[2] 細節,細節,還是細節
[3] 執行

第一部分: 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模式變異而來,是“可插(拔)”的,而功能被加載進內存則是通過大致地一個abstract factory設計模式而實現的。

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

1.  API Class:這是一個通過靜態方法定義和暴露所需功能的類,在API Class中并沒有具體的實現。此類保持一個對Application Provider Base類的引用,這個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 Provider Base:這是一個從ProviderBase類繼承來的一個抽象類,同時也是API類的一個“鏡像”,通過在API中所暴露的方法來為父類定義抽象方法并在父類中實現。

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

 

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

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

 


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

 

0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()