程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 有關泛型和模式

有關泛型和模式

編輯:關於.NET

仿Petshop4.0的架構,在實體層使用了ORM框架Nhibernate

封裝NH對業務對象的訪問如下:

/// <summary>
/// 查詢記錄
/// </summary>
/// <param name="hql">HQL語句</param>
/// <param name="args">HQL語句中的參數值</param>
/// <returns>IList<T></returns>
public IList<T> Select<T>(string hql, Dictionary<string, object> args)
{
 try
 {
  session = NHibernateDatabaseFactory.CreateSession();
  IQuery query = session.CreateQuery(hql);
  if (args != null)
  {
    this.PrepareQuery(query, args);
  }
  return query.List<T>();
 }
 catch (Exception err)
 {
  throw err;
 }
}

對業務對象的加載上,有兩種方式。

方式一:

實體層:在BaseDAL類中定義通用的泛型訪問方法

public statci IList<T> GetData<T>(string hql)

{

 return new NHUtility.NHibernateHelper().Select<T>(hql);

}

業務層訪問:

如Employee業務層:

public List<EmployeeInfo> GetData()

{

 List<EmployeeInfo> emps = (List<EmployeeInfo>) BaseDAL.GetData<EmployeeInfo>("From Employee E");

}

這種方式,每個業務對象都要在業務層實現GetData方法。

方式二:

實體層:在BaseDAL定義GetData ()模板方法 BaseInfo為所有業務對象的基類

public IList<BaseInfo> GetData ()

{

 String hql = InitHQL ();

 return new NHUtility.NHibernateHelper().Select< BaseInfo >(hql);

}

protected abstract string InitHQL()

{

}

在EmployeeDAL子類中實現InitHQL方法:

protected override string InitHQL()

{

 return "From Employee E";

}

這種方式,每個業務對象都要定義實體類,並重載InitHQL方法。

業務層調用:   

通過反射+配置文件(或者DALFactory)調用DAL層,

<appSettings>
    <add key="DAL" value=" SQLServerDAL "/>
</appSettings>

{

  string path = ConfigurationManager.AppSettings["DAL"];

  string fullyQualifiedClass = path + "." + Key + "DAL";

  BaseDAL dal = (BaseDAL)Assembly.Load(path).CreateInstance (fullyQualifiedClass);

  List<BaseInfo> data = dal.GetData();

}

方式一感覺比較簡單,但業務層很難應用工程模式,

方式二可以應用工廠模式,但比較復雜,哪種方式更好呢?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved