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

C# 設計模式深度解析:提供者模式 (Provider Pattern) 實作第六部分 - Message 核心類別

     編輯:關於C語言

提供者模式核心實作:Message 類別詳細解析

在提供者模式架構中,Message 類別扮演著「上下文」角色,負責對外暴露統一介面,並透過配置動態載入具體的提供者實作。本文深入剖析其靜態初始化、提供者載入與委派呼叫機制。

核心架構設計

Message 類別採用靜態建構函式確保單一初始化,內部維護提供者集合與當前作用中的提供者實例:

  • 靜態欄位:_providers 儲存所有已載入的提供者,_provider 指向預設提供者。
  • 執行緒安全:透過 m_isInitialized 標記防止重複初始化。

初始化流程詳解

Initialize() 方法是核心載入邏輯:

  1. 從配置區段 MessageProvider 讀取設定。
  2. 使用 ProvidersHelper.InstantiateProviders 實例化所有提供者並加入集合。
  3. 根據 defaultProvider 設定指派當前作用提供者。
private static void Initialize() {
    try {
        if (!m_isInitialized) {
            var messageConfig = (MessageProviderConfigurationSection)ConfigurationManager.GetSection("MessageProvider");
            if (messageConfig == null)
                throw new ConfigurationErrorsException("找不到 MessageProvider 配置區段");

            _providers = new MessageProviderCollection();
            ProvidersHelper.InstantiateProviders(messageConfig.Providers, _providers, typeof(MessageProvider));
            _provider = _providers[messageConfig.DefaultProvider] as MessageProvider;
            m_isInitialized = true;
        }
    } catch (Exception ex) {
        throw new Exception(ex.Message);
    }
}

對外服務介面

靜態方法 Insert 與 Get 直接委派給當前提供者,實現介面與實作分離:

public static bool Insert(MessageModel mm) => _provider.Insert(mm);
public static List<MessageModel> Get() => _provider.Get();

設計優勢

  • 配置驅動:無需修改程式碼即可切換資料存取方式 (SQL/XML/其他)。
  • 單一職責:Message 僅負責協調,不包含具體資料邏輯。
  • 擴充性:新增提供者只需實作 MessageProvider 並註冊配置。

此實作展示了提供者模式在 ASP.NET 型態系統中的標準應用模式,適合需支援多種資料來源的企業級應用開發。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved