• 泛型接口的定义参考


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

  • 相关阅读:
    html实现虚线分隔线3例
    sql server 中将由逗号“,”分割的一个字符串,转换为一个表,并应用与 in 条件
    在Repeater中添加runat="server"的div,并控制
    Oracle中实现自增长列(转)
    SQL中按月进行分组(转)
    复制到剪切板js代码(转)
    如何使 Menu控件的链接打开指定的框架页(转)
    RadioButtonList限制每行"项"的个数
    Repeater_ItemDataBound 中用字段名获取值
    IIS7.0下配置Asp项目
  • 原文地址:https://www.cnblogs.com/step-city/p/5821024.html
Copyright © 2020-2023  润新知