- 泛型接口的定義就是:
public interface IDAL<T> where T : class { int Insert(T model); int Update(T model); int Delete(int id); T GetModel(int id); IList<T> GetList(); }
- 那么在UserDAL這個繼承類中就可以明確定義那個泛型的類型了,因為我這個類就是用來實現User這個實體類的(或者說數據庫的表吧),這里,UserDAL我們就叫IUserDAL的客戶端了。代碼如下:
public class UserDAL : IDAL<User> { #region IDAL<User> 成員 public int Insert(User model) { //coding } public int Update(User model) { //coding } public int Delete(object id) { //coding } public User GetModel(object id) { //coding } public IList<User> GetList() { //coding } #endregion }
- 那么用泛型的話,我們就可以為所有的BLL定義一個基類,其他類只要繼承下,稍微的根據業務的不同增加點業務代碼就可以,甚至都可以不用繼承了,我們先看代碼的實現吧,搞這行代碼才是最好說話的,請看下面代碼:
public class BaseBLL<T, D> where T : class where D : IDAL<T>,new () { private D dal = new D(); public virtual int Insert(T model) { return dal.Insert(model); } public virtual int Update(T model) { return dal.Update(model); } public virtual int Delete(object id) { return dal.Delete(id); } public virtual T GetModel(object id) { return dal.GetModel(id); } public virtual IList<T> GetList() { return dal.GetList(model); } }
- 這個也簡單把,也就是把實體類換為T,把IDAL接口換為D,並定義D這個類型的約束,也就是說我的這個D一定是一個實現了IDAL<T>這個接口的,而IDAL尖括號里面的T就是BaseBLL里面的T,看到這里,相信大家都應該明白了,如果你想實現UserBLL,就可以繼承BaseBLL這個基類,這里為什么把BaseBLL中的方法定義為virtual呢,原因很簡單的,因為你的BLL層的其他類不可能就沒有業務,不可能就是簡單的調用DAL方法吧,其他的BLL類就可以根據業務去override相關的方法了,UserBLL相應代碼如下:
public class UserBLL : BaseBLL<User, UserDAL> { }
-
如果UserBLL沒有任何業務的話,那就不要繼承了,在UI直接用BaseBLL這個泛型類就可以,調用也很簡單
BaseBLL<User> dal=new BaseBLL<User>();這樣就可以了。