泛型接口的定义参考

  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>();这样就可以了。

原文地址:https://www.cnblogs.com/step-city/p/5821024.html