泛型接口的定義參考


  1. 泛型接口的定義就是:
    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();
        }

     

  2. 那么在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
        }

     

  3.  那么用泛型的話,我們就可以為所有的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);
            }
        }

     

  4. 這個也簡單把,也就是把實體類換為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>
        {
            
         }

     

  5. 如果UserBLL沒有任何業務的話,那就不要繼承了,在UI直接用BaseBLL這個泛型類就可以,調用也很簡單

           BaseBLL<User> dal=new BaseBLL<User>();這樣就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM