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

C# 提供者模式實作第二部分:核心領域模型與抽象提供者基類

     編輯:關於C語言

基礎建構:MessageModel 與 MessageProvider 抽象基類

提供者模式的基石在於清晰的領域模型定義與抽象契約。本文介紹核心實體 MessageModel 以及定義提供者行為契約的 MessageProvider 抽象類別。

領域實體:MessageModel

簡潔的資料傳輸物件 (DTO),封裝訊息內容與發布時間:

public class MessageModel {
    public MessageModel(string msg, DateTime pt) {
        _message = msg;
        _publishTime = pt;
    }

    private string _message;
    public string Message { get => _message; set => _message = value; }

    private DateTime _publishTime;
    public DateTime PublishTime { get => _publishTime; set => _publishTime = value; }
}

設計重點:

  • 不可變性考量:若需不可變,可移除 setter 或採用 init (C# 9+)。
  • 序列化友善:公共屬性支援 XML/JSON 序列化。
  • 無行為邏輯:純資料容器,符合貧血模型特徵,適合跨層傳遞。

抽象提供者契約:MessageProvider

繼承 ProviderBase (System.Configuration.Provider),強制實作兩大核心操作:

public abstract class MessageProvider : ProviderBase {
    public abstract bool Insert(MessageModel mm);
    public abstract List<MessageModel> Get();
}

繼承 ProviderBase 的優勢

  1. 標準化生命週期:自動獲得 Initialize(name, config) 呼叫機制。
  2. 配置整合:原生支援 ProviderSettings 屬性映射。
  3. 識別與描述:內建 Name、Description 屬性利於管理與除錯。

契約設計原則

  • 最小介面:僅定義必要操作,避免介面膨脹。
  • 回傳型別明確:使用具體集合型別 List<T> 而非 IEnumerable<T>,便於上層直接操作。
  • 異常處理留給實作:介面不規定異常型別,實作者可拋出 ProviderException 或自訂異常。

擴充性展望

未來若需新增操作 (如 Update, Delete, GetById),可採用介面隔離原則:

public interface IMessageReader { List<MessageModel> Get(); }
public interface IMessageWriter { bool Insert(MessageModel mm); }
public interface IMessageProvider : IMessageReader, IMessageWriter { }

並讓 MessageProvider 實作 IMessageProvider,既保持向後相容又支援依賴注入容器的精細解析。

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