學習技巧: 5顆星
學習條件:
1. 物件導向編程(OOP)基礎
2. OOA的Design Pattern基本概念
3. IIS基本概念
4. ASP.NET與C#編程基礎
ProviderBase是自從NET. Framework 2.0後新增的功能, 他是相當核心的底層元件, 利用它可以封裝各式各樣的ASP.NET機能, 由於他太過底層. 所以一般編程設計不太會去面對它. 根據MSDN文件紀載了他的結構:
public abstract class ProviderBase
顯而易見可以看出, 他是一個抽象, 而非具象結構. 在ASP.NET中有很多元件皆是實作這個抽象. 他提供了一種稱之為Provider的機制與概念, 也就是功能上的提供者. 例如我們在IIS可以看到基本的RBAC機制, 像是RoleProvider或著MembershipProvider等, 都是實作這個抽象.
上圖是從IIS建立一個Web Application在Feature View可以看到的ASP.NET項目提供的Provider部分. 這個Provider項目可以查看RBAC機制所實作的相關Provider元件, 請注意! 這些Provider元件全部都可以是屬於(IS A)ProviderBase. 為什麼我們要談到這個如此底層的機制呢? 這個原因在於在往後介紹的IIS RBAC整合, 皆會與Provider框架有關, 如果能理解這個框架服務. 對於往後在學習上也有所助益!
ProviderBase來自System.Configuration.Provider組件, 並且她是個類別, 且是abstract的, 要注意這個抽象的修飾! 一般在抽象上, 提供的方法是稀少的, 在這個ProviderBase也是如此! 目的在於給衍生類別進行擴展. 在這篇的重點就是必須要理解它的結構化形式, 我這邊拿MembershipProvider的衍生類別來說明, 來看看MembershipProvider的類別結構:
public abstract class MembershipProvider : ProviderBase
可以顯而易見看出他是一個抽象, 並且繼承於ProviderBase, 在MembershipProvider已經定義了有關RBAC的成員部份的各種簽章, 例如ChangePassword(), FindUsersByName()等, 可以看出已經有一個具體的架構了. 這些簽章固定了往後具象類別的操作, 意味著具象類別在職責上來說已經確立了他的用途, 因為父類別已經提供了多種算法簽章.
上圖是IIS的Provider項目裡面可以看到的有關MembershipProvider的具象成員, 這個具象成員是由NET. Framework提供了預設成員, 透過這個預設的物件成員, 可以輕而易舉實作簡單的RBAC機制. 這個成員來自SqlMembershipProvider的具象, 來看看這個具象類別的結構:
public class SqlMembershipProvider : MembershipProvider
可以看出他是直接實作MembershipProvider的抽象, 因此在類別層次上只有兩層, 這在OOP的實務設計中是相當合理的. 由於超類別已經固定了許多相關的簽章, 因此相關的具象類別必須要實做這些簽章. 微軟已經提供了預設物件成員, 因此可以直接拿來使用, 除非有特殊需求, 否則要實作上層的抽象成員是相當繁瑣的.
另外再來看看RBAC的Role組件, 他定義了有關User屬於哪類群組, RoleProvider便是屬於ProviderBase的下層抽象, 供相關具象類別使用. 來看看它的結構:
public abstract class RoleProvider : ProviderBase
RoleProvider提供有關群組建立與維護的操作, 並且固定了許多相關的簽章, 下層具象成員實作這個抽象, 必須要完全符合這些簽章算法, 概念跟MembershipProvider是一樣的.