首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 多品牌 IC 卡讀卡機/門禁設備整合架構:介面 + 策略模式 + 反射

     編輯:程式設計綜合問答

需求

平台需支援多廠牌 IC 卡讀卡機、門禁控制器,發送統一指令 (讀卡、開門),各廠商依平台通訊協定改造或開發適配器。

推薦架構:介面抽象 + 策略模式 + 反射載入 (外掛式)

1. 定義統一介面

public interface ICardReader {
    string ReadCard(); // 回傳卡號
    void Initialize(IDictionary config); // 參數設定
}

public interface IDoorController {
    bool OpenDoor();
    void Initialize(IDictionary config);
}

2. 各廠商實作具體類別 (編譯為獨立 DLL)


// VendorA_CardReader.dll
public class VendorACardReader : ICardReader {
    public void Initialize(IDictionary config) { /* 串口/TCP 設定 */ }
    public string ReadCard() { /* 發送廠商指令、解析回傳 */ return "CARD123"; }
}

// VendorB_DoorController.dll
public class VendorBDoorController : IDoorController { ... }

3. 設定檔指定實作類別

// appsettings.json
{
  "Hardware": {
    "CardReader": {
      "Type": "VendorA.CardReader.VendorACardReader, VendorA_CardReader",
      "Config": { "Port": "COM3", "BaudRate": "9600" }
    },
    "DoorController": {
      "Type": "VendorB.Door.VendorBDoorController, VendorB_Door",
      "Config": { "IP": "192.168.1.100", "Port": "5000" }
    }
  }
}

4. 工廠類別反射建立實例


public static class HardwareFactory {
    public static T Create(string typeName, IDictionary config) where T : class {
        Type type = Type.GetType(typeName, throwOnError: true);
        T instance = (T)Activator.CreateInstance(type);
        if (instance is IInitializable init) init.Initialize(config);
        return instance;
    }
}

// 使用
var reader = HardwareFactory.Create(cfg["Hardware:CardReader:Type"], cfg["Hardware:CardReader:Config"]);
var cardNo = reader.ReadCard();

優勢

  • 平台核心零修改:新增廠牌只需開發新 DLL、更新設定檔。
  • 廠商開發獨立:各廠商依介面開發,互不干擾,智慧財產權保護。
  • 部署彈性:客戶現場只需放入對應 DLL,無需重新編譯主程式。
  • 測試容易:可注入 Mock 實作進行單元測試。

通訊協定標準化建議

若廠商無法修改韌體,平台側開發 **適配器 (Adapter)** 將統一指令轉換為廠商私有協定 (TCP/Serial/USB HID),同上架構處理。

擴充:裝置發現與熱插拔

  • 使用 FileSystemWatcher 監控 DLL 目錄,動態載入/卸載。
  • 搭配 MEF (Managed Extensibility Framework) 或 Autofac 等 DI 容器管理生命週期。

介面導向設計 + 反射載入,是解決多廠牌硬體整合的經典最佳實踐。

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