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

循序漸進開發 WinForm 專案 (二):項目代碼深度解析——接口、實現、業務邏輯三層協作機制

     編輯:關於.NET

承接上篇《數據庫設計與框架生成》,本文深入剖析生成專案的核心代碼結構:IDAL 接口層 → DALSQL 實現層 → BLL 業務層 的泛型協作機制、反射工廠創建流程、多庫動態切換原理,助你從「會用」進階到「懂原理、能擴展」。

1. IDAL 接口層:極簡業務擴展點

namespace WHC.TestProject.IDAL {
    public interface ICustomer : IBaseDAL<CustomerInfo> { }
}

IBaseDAL<T> 封裝增刪改查、分頁、條件查詢等標準接口,泛型強類型避免拆箱裝箱與拼寫錯誤。ICustomer 僅在標準接口不足時添加業務專屬方法。

IBaseDAL 介面定義

2. DALSQL 實現層:基類鏈與映射邏輯

namespace WHC.TestProject.DALSQL {
    public class Customer : BaseDALSQL<CustomerInfo>, ICustomer { }
}
  • BaseDALSQL<T> → AbstractBaseDAL (超級基類,含通用 ADO.NET 邏輯)
  • 基類置於 WHC.Framework.ControlUtil 獨立類庫,避免重複生成與版本衝突

繼承關係圖

BaseDALSQL 定義

實體↔資料庫映射由代碼生成器自動產出兩核心方法:

protected override CustomerInfo DataReaderToEntity(IDataReader dr) {
    var r = new SmartDataReader(dr);
    return new CustomerInfo {
        ID = r.GetString("ID"), Name = r.GetString("Name"), Age = r.GetInt32("Age"),
        Creator = r.GetString("Creator"), CreateTime = r.GetDateTime("CreateTime")
    };
}
protected override Hashtable GetHashByEntity(CustomerInfo obj) {
    return new Hashtable {
        {"ID", obj.ID}, {"Name", obj.Name}, {"Age", obj.Age},
        {"Creator", obj.Creator}, {"CreateTime", obj.CreateTime}
    };
}

3. BLL 業務層:配置驅動的多庫動態構造

public class Customer : BaseBLL<CustomerInfo> {
    public Customer() : base() {
        base.Init(this.GetType().FullName, Assembly.GetExecutingAssembly().GetName().Name);
    }
}

BaseBLL.Init 核心邏輯:讀取 ComponentDbType 設定 → 決定 DAL 前綴 (DALSQL./DALOracle./DALSQLite....) → 替換命名空間 → 反射創建 DAL 實例並轉為 IBaseDAL<T>:

string dbType = config.AppConfigGet("ComponentDbType") ?? "sqlserver";
string DALPrefix = dbType switch {
    "sqlserver" => "DALSQL.", "oracle" => "DALOracle.", "sqlite" => "DALSQLite.",
    "mysql" => "DALMySql.", "access" => "DALAccess.", _ => "DALSQL."
};
this.dalName = bllFullName.Replace("BLL.", DALPrefix);
baseDal = Reflect<IBaseDAL<T>>.Create(this.dalName, dalAssemblyName);

4. 統一調用入口:BLLFactory 泛型工廠

public class BLLFactory<T> where T : class {
    private static Hashtable objCache = new Hashtable();
    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];
            }
        }
    }
}

使用範例:

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

此架構實現:介面編程、強類型、單例快取、配置驅動多庫、反射解耦 五大核心特性,是 Winform 框架穩定高效的基石。

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