ProviderBase框架概要

    內容表格
    沒有標頭

    版本為 05:17, 6 Nov 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    學習技巧: 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_provider_option.gif
    上圖是從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_default_sql_membership.gif
    上圖是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是一樣的.
    iis_default_sql_role.gif
    微軟已經提供了預設的RoleProvider具象成員, 可以直接拿來使用, 不需要另外花費寶貴的時間去設計. 一般會直接去使用AspNetSqlRoleProvider來實作.
    從微軟體供了兩個預設的具象Provider成員可以看到他們都是由上層抽象來實做相關的符合簽章, 這些簽章固定了算法形式. 這是一個很重要的提醒點. 由上層抽象提供相關的算法簽章, 再由各種相關的具象類別來實作. 彼此不會有任何干涉, 形成各種算法上的獨立, 而且在實務設計上, 用較小的細粒度縮小範圍, 有效在執行期間輕而易舉去替換算法物件. 沒錯! ProviderBase架構整體是一個Strategy Pattern的變形式, 差別在於它不是典型的介面(interface)設計, 由第一層到二層都是以abstract作為宣告.

    Powered by MindTouch Core