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

Winform/WCF/混合式框架業務對象統一調用:BLLFactory 與 CallerFactory 雙工廠模式深度解析

     編輯:關於.NET

框架核心設計原則:統一調用入口、強類型、單例快取、配置驅動、反射解耦。本文深度剖析 BLLFactory (傳統 Winform) 與 CallerFactory (WCF/混合式) 雙工廠的實現細節、創建鏈路、跨框架遷移規律。

1. BLLFactory:本地業務層統一入口

public class BLLFactory<T> where T : class {
    private static Hashtable objCache = new Hashtable();
    private static object syncRoot = new object();
    public static T Instance {
        get {
            var key = typeof(T).FullName;
            if (objCache[key] is T cached) return cached;
            lock (syncRoot) {
                if (objCache[key] == null) {
                    var inst = Reflect<T>.Create(typeof(T).FullName, typeof(T).Assembly.GetName().Name);
                    objCache[key] = inst;
                }
                return (T)objCache[key];
            }
        }
    }
}

BLLFactory 創建示意

公用類庫定義,所有模塊共享:

公用類庫結構

2. 業務類構造鏈路:BaseBLL.Init 動態綁定 DAL

public class User : BaseBLL<UserInfo> {
    private IUser userDal;
    public User() : base() {
        base.Init(this.GetType().FullName, Assembly.GetExecutingAssembly().GetName().Name);
        this.userDal = (IUser)base.baseDal;
    }
}

BaseBLL.Init 讀取配置 ComponentDbType → 確定 DAL 前綴 → 替換命名空間 → 反射創建 DAL 實例 → 轉為 IBaseDAL<T>。調用時:

var info = BLLFactory<User>.Instance.FindByID(id);
BLLFactory<User>.Instance.Update(info, info.ID);

3. CallerFactory:分布式/混合式框架門面層工廠

適用於 WCF 客戶代理或 BLL 進一步封裝,UI 層調用方式與 BLLFactory 幾乎一致:

var info = CallerFactory<IUserService>.Instance.FindByID(id);
CallerFactory<IUserService>.Instance.Update(info, info.ID);

混合式框架結構

4. CallerFactory 核心實現:配置驅動創建門面實例

public class CallerFactory<T> {
    private static Hashtable objCache = new Hashtable();
    private static string callerNamespace = null; // Facade 實現類命名空間
    public static T Instance {
        get {
            var key = typeof(T).FullName;
            if (objCache[key] is T cached) return cached;
            lock (syncRoot) {
                if (objCache[key] == null) {
                    var inst = CreateObject(); // 隔離創建邏輯
                    if (inst != null) objCache[key] = inst;
                }
                return (T)objCache[key];
            }
        }
    }
    private static T CreateObject() {
        // 讀取 WCF 配置 → 定位程序集 → 反射創建 Facade 實現類 → 轉為 T
    }
}

CallerFactory 創建流程

5. 統一模式帶來的遷移紅利

  • Winform → WCF/混合式:UI 代碼僅將 `BLLFactory<User>` 改為 `CallerFactory<IUserService>`,邏輯結構零變動
  • 學習成本極低、遷移風險可控、測試驗證可復用
  • 四大框架 (Winform/WCF/混合式/Web) 共享同一調用範式

四大框架總覽

雙工廠模式是框架「統一性」原則的極致體現,讓開發者專注業務而非基礎設施差異。

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