首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

深入 ASP.NET 2.0 提供者模型:架構設計與實作範例

     編輯:關於ASP.NET

本文詳細探討提供者模型並分析如何應用於 ASP.NET 2.0 開發,具體內容包括:API 實作、提供者模型優點、ASP.NET 2.0 提供者模型與補充資訊等。

一、引言

早在 2001 年,我著手開發一個 ASP.NET 線上討論區應用程式 WebForums.NET。目的是建立基於 ASP.NET 討論區系統,且能容易插入現有網站。構建此端對端應用程式特別挑戰之一是,要為客戶提供方式整合到他們自己的系統。例如,線上討論區明顯需某種資料儲存存儲用戶資訊、討論區、回覆訊息等;但最好別將客戶鎖定在特定資料儲存。也就是說,不應說「我的應用程式必須用微軟 SQL Server 2000」;否則用 Oracle 或 Access 客戶怎麼用你軟體?

另一整合客戶現有資料問題:所有線上討論區網站都提供用戶帳戶與建立新帳戶方式。通常建模為討論區架構(以資料庫 Users 表形式存在)。但客戶可能已有擁有成千用戶帳戶的資料庫表。或客戶想在內部網使用討論區,想用 Active Directory 而非資料庫表認證與存儲用戶資訊。因此,當討論區軟體系統建立 Users 資料庫表並對客戶說「這就是你存儲用戶方式」時,已擁有現有基礎建設與用戶資料客戶很可能疏遠此軟體。

因此,使用「僵硬」API 構建系統會產生特別挑戰。「僵硬」API 不提供定制邏輯方式,而是硬編碼實作細節(如必須用 SQL Server 作後端資料儲存,且此資料庫有 Users 表存所有用戶資訊)。然而,透過使用提供者設計模式,可輕易打破這種「僵硬」性。借助提供者設計模式,系統架構師只需定義 API,程式功能由系統提供。對線上討論區應用程式,這可能包含具有如 Authenticate(username,password) 和 GetUserDetails(username) 等方法的 Users 類別。

提供者模型優秀在於客戶實現方案可指定系統應使用的客製化類別。此客製化類別必須實現系統良好定義 API;但允許無縫插入任何客製化實現。也就是說,一定義此 API,系統實現者可建立使用 SQL Server 和 Users 表的預設具體實現——大多數客戶可直接使用而無需修改。有客製化需求客戶(想用 Oracle 或其他方式存儲用戶資料)可建立自己的類別,提供必要功能並插入其系統。

其實,提供者設計模式被應用於整個 ASP.NET 2.0 實現中。當然,網上也存在如何在 ASP.NET 1.x 應用程式中使用此功能教學。

本文將詳細探討提供者模型並分析如何應用於 ASP.NET 2.0 開發。

二、打破「僵硬」API 實作

我早期 WebForums.NET 開發中,認識到此「僵硬」API 實作將成問題。我軟體設計目標之一:盡可能靈活且可客製化,並讓用戶用 SQL Server,且我用戶資料模型實現充其量只是有些限制性。為克服此問題,我構建包含兩部分系統:

  1. 一組定義系統核心功能的抽象基底類別;
  2. 能在執行時動態載入擴展抽象基底類別。具體說,程式碼負責檢查包含 <ConfigSetting> 區段(該區段給出要使用類別完整限定名)的 Web.config 檔案。

借助此架構,可透過一系列抽象基底類別定義系統功能,並用 SQL Server 2000 和 Users 表提供這些類別具體實現。滿足此配置客戶只管用應用程式,一切工作良好,無需寫一行程式碼。然而,需客製化開發者可透過建立衍生自適當抽象基底類別的類別實現。透過簡單將該組件放到應用程式 /bin 目錄並更新 Web.config,他們可讓系統使用新類別。具體說,WebForums.NET 發行帶有抽象基底類別 DataProvider,清楚列舉系統所有方法,類似如下:

public abstract class DataProvider
{
public abstract bool AuthenticateUser(string username, string password);
public abstract User GetUserInfo(string username);
...
public static DataProvider Instance()
{
...
}
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved