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

抽象工廠模式:構建可切換數據訪問層的最佳實踐

     編輯:關於.NET

從簡單工廠到抽象工廠

簡單工雖能分離對象創建與使用,但只能創建單一對象。當需要創建一系列相互依賴的對象(如不同數據庫的學員、管理員數據訪問對象)時,抽象工廠模式應運而生。

核心角色與職責

  • 抽象工廠:定義創建抽象產品的接口(如創建學員、管理員服務)。
  • 抽象產品:聲明實體產品的訪問接口(如 IStudentService、IAdminService)。
  • 實體工廠:實現抽象工廠,創建具體產品(如 SqlDALFactory、AccessDALFactory)。
  • 實體產品:實現具體業務邏輯(如 SqlServer 的 StudentService、Access 的 StudentService)。

MySchoolProfessional 專案實戰

專案結構清晰劃分:

  • MySchoolIDAL:定義數據訪問接口(IStudentService、IAdminService)。
  • MySchoolDAL.SqlServer / MySchoolDAL.Access:針對不同數據庫實現接口,封裝具體 SQL 與連接邏輯。
  • MySchoolDALFactory:包含抽象工廠 AbstractDALFactory 及兩個實體工廠,通過配置文件(DBType)動態選擇工廠實例。
  • MySchoolBLL:業務邏輯層調用工廠獲取服務,實現登錄等業務流程,完全解耦具體數據訪問實現。

關鍵代碼片段

抽象工廠與動態選擇

public abstract class AbstractDALFactory {
public static AbstractDALFactory ChooseFactory() {
string dbType = ConfigurationSettings.AppSettings["DBType"].ToString();
switch(dbType) {
case "Sql": return new SqlDALFactory();
case "Access": return new AccessDALFactory();
}
return null;
}
public abstract IStudentService CreateStudentService();
public abstract IAdminService CreateAdminService();
}

業務層調用示例

public static class LoginManager {
private static AbstractDALFactory factory = AbstractDALFactory.ChooseFactory();
private static IStudentService studentService = factory.CreateStudentService();
private static IAdminService adminService = factory.CreateAdminService();
public static bool Login(string loginID, string password, string type) { ... }
}

模式優勢總結

  • 提供一系列相關對象的創建接口,無需指定具體類。
  • 系統獨立於產品創建、組合與表示。
  • 支持多產品系列配置(如 SQL Server / Access 雙模式)。
  • 封裝 new 操作,降低耦合,利於擴展與維護。

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