- 泛型接口的定义就是:
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>();这样就可以了。