曾經參與開發過的的項目,一般都是采用MVC模式進行開發,大概框架圖如下:
web界面層調用BLL業務層,BLL通過抽象工廠DALFactory動態生成繼承了IDAL的數據庫操作層實例,以進行對數據庫的各項操作。
DALFactory這層主要是根據web配置,通過反射動態生成IDAL實例,方便BLL層調用。
以前的做法是,IDAL每增加一個接口(如IUser),DALFactory就得添加一個方法用於產生繼承了該接口的實例類.粗略代碼:
public class DataAccess
{
protected static readonly string path = ConfigurationManager.AppSettings["ReportDemo_DAL"];
public static IExcel_ReportCell CreateExcel_ReportCell()
{
string className = path + "." + typeof(IExcel_ReportCell).Name.Substring(1);
return (IExcel_ReportCell)Assembly.Load(path).CreateInstance(className);
}
public static IExcel_Reportcondition CreateExcel_Reportcondition()
{
string className = path + "." + typeof(IExcel_Reportcondition).Name.Substring(1);
return (IExcel_Reportcondition)Assembly.Load(path).CreateInstance(className);
}
//更多....
}
這樣就會有一個問題A:每添加一個接口就得創建一個工廠方法。感覺太麻煩了,於是對這個工廠進行了修改,代碼如下:
1 using System.Reflection;
2 using System.Web;
3 using System.Web.Caching;
4 using System.Configuration;
5
6 namespace EHRExcelReprot.DALFactory
7 {
8 public sealed class ObjDataAccess<T>
9 {
10 //獲取web.confg文件配置信息
11 private static readonly string path = ConfigurationManager.AppSettings["ExcelReportDAL"];
12 public static T Get()
13 {
14 //注意:這裡一定要確保這樣一個命名規則:接口類名稱只比繼承它的類名稱前面多一個‘I’字母
15 //如:接口類名:IUser,繼承它的類:User
16 string CacheKey = path +