『Spring.NET+NHibernate+泛型』框架搭建之BLL(四)

来源:互联网 发布:阿里云企业邮箱后缀 编辑:程序博客网 时间:2024/06/06 14:22

  本节讲解业务逻辑层BLL。很简单和DAO层类似,通过泛型封装相似的功能到父类,其他子类继承父类即可,具体看下面操作。


一、业务逻辑接口层IBLL

  1. 在解决方案上右键新建一个类库,命名为IBLL,用来存放业务逻辑接口层代码,并添加引用实体层Model,数据库访问接口层IDAO

  2. 在类库中添加一个父接口,命名为IBLL,并定义常用的方法,代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using IDAO;namespace IBLL{    public interface IBLL<T>    {        IDAO<T> Dao { get; set; }        /// <summary>        /// 添加实体        /// </summary>        /// <param name="entity"></param>        int Add(T entity);        /// <summary>        /// 修改实体        /// </summary>        /// <param name="entity"></param>        void Update(T entity);        /// <summary>        /// 保存或修改实体        /// </summary>        /// <param name="customer"></param>        void SaveOrUpdate(IList<T> list);        /// <summary>        /// 删除实体        /// </summary>        /// <param name="entity"></param>        void Delete(T entity);        /// <summary>        /// 按条件删除        /// </summary>        /// <param name="sqlWhere">删除条件</param>        void Delete(string sqlWhere);        /// <summary>        /// 根据ID得到实体        /// </summary>        /// <param name="id"></param>        /// <returns></returns>        T Get(int id);        /// <summary>        /// 根据ID得到实体        /// </summary>        /// <param name="id"></param>        /// <returns></returns>        T Load(int id);        /// <summary>        /// 得到所有实体        /// </summary>        /// <returns></returns>        IList<T> LoadAll();        /// <summary>        /// 按条件排序得到前N条记录        /// </summary>        /// <param name="top">获取条数</param>        /// <param name="field">排序字段</param>        /// <param order="field">排序方式,升序asc,降序desc</param>        /// <returns></returns>        IList<T> QueryTop(int top, string field, string order = "asc");        /// <summary>        /// 根据条件得到实体        /// </summary>        /// <param name="sqlWhere">查询条件</param>        /// <returns></returns>        IList<T> Where(string sqlWhere="");        /// <summary>        /// 得到统计数量        /// </summary>        /// <param name="strWhere">查询条件</param>        /// <returns></returns>        int GetRecordCount(string strWhere = "");        /// <summary>        /// 分页获取数据列表        /// </summary>        /// <param name="PageSize">每页获取数据条数</param>        /// <param name="PageIndex">当前页是第几页</param>        /// <param name="strWhere">查询条件</param>        /// <returns></returns>        IList<T> GetPageList(int PageSize, int PageIndex, string strWhere = "");        /// <summary>        /// 根据数据字典父编码和编码获取名称        /// </summary>        /// <param name="parentNumber">父编码</param>        /// <param name="number">编码</param>        /// <returns></returns>        string GetName(string parentNumber, string number);        /// <summary>        /// 获取该父编码下最大编码        /// </summary>        /// <param name="parentNumber">父编码</param>        /// <returns></returns>        string GetMaxNumber(string parentNumber);    }}


  3.定义好了父接口,下面定义子接口,还是以IT_RoleBLL为例,代码如下:

using System;using Model;namespace IBLL{    public interface IT_RoleBLL : IBLL<T_Role>    {    }}


  这样,IT_RoleBLL就拥有了IBLL定义了的方法,如果IT_RoleBLL有特殊方法,直接添加在IT_RoleBLL里面即可,以IT_AreaBLL为例,代码如下:


using Model;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace IBLL{    public interface IT_AreaBLL : IBLL<T_Area>    {        int GenerateAreaNumber(string parentNumber);    }}


  最后,我们看一下IBLL层的目录结构:



二、业务逻辑实现层BLL


  1. 在解决方案上右键新建一个类库,命名为BLL,用来存放业务逻辑实现层代码,并添加引用IBLL接口层、实体层Model和数据库访问接口层IDAO

  2. 在类库中添加一个父接口,命名为BLL,并定义常用的方法,代码如下:

using IBLL;using System;using System.Collections.Generic;using System.Linq;using System.Text;using Model;using IDAO;namespace BLL{    public class BLL<T>:IBLL<T>    {        public IDAO<T> Dao { get; set; }        /// <summary>        /// 添加实体        /// </summary>        /// <param name="entity"></param>        public int Add(T entity)        {            return Dao.Add(entity);        }        /// <summary>        /// 修改实体        /// </summary>        /// <param name="entity"></param>        public void Update(T entity)        {            Dao.Update(entity);        }        /// <summary>        /// 保存或修改实体        /// </summary>        /// <param name="customer"></param>        public void SaveOrUpdate(IList<T> list)        {            Dao.SaveOrUpdate(list);        }        /// <summary>        /// 删除实体        /// </summary>        /// <param name="entity"></param>        public void Delete(T entity)        {            Dao.Delete(entity);        }        /// <summary>        /// 按条件删除        /// </summary>        /// <param name="sqlWhere">删除条件</param>        public void Delete(string sqlWhere)        {            Dao.Delete(sqlWhere);        }        /// <summary>        /// 根据ID得到实体        /// </summary>        /// <param name="id"></param>        /// <returns></returns>        public T Get(int id)        {            return Dao.Get(id);        }        /// <summary>        /// 根据ID得到实体        /// </summary>        /// <param name="id"></param>        /// <returns></returns>        public T Load(int id)        {            return Dao.Load(id);        }        /// <summary>        /// 得到所有实体        /// </summary>        /// <returns></returns>        public IList<T> LoadAll()        {            return Dao.LoadAll();        }        /// <summary>        /// 按条件排序得到前N条记录        /// </summary>        /// <param name="top">获取条数</param>        /// <param name="field">排序字段</param>        /// <param order="field">排序方式,升序asc,降序desc</param>        /// <returns></returns>        public IList<T> QueryTop(int top, string field, string order = "asc")        {            return Dao.QueryTop(top,field,order);        }        /// <summary>        /// 根据条件得到实体        /// </summary>        /// <param name="sqlWhere">查询条件</param>        /// <returns></returns>        public IList<T> Where(string sqlWhere = "")        {            return Dao.Where(sqlWhere);        }        /// <summary>        /// 得到统计数量        /// </summary>        /// <param name="strWhere">查询条件</param>        /// <returns></returns>        public int GetRecordCount(string strWhere="")        {            return Dao.GetRecordCount(strWhere);        }        /// <summary>        /// 分页获取数据列表        /// </summary>        /// <param name="PageSize">每页获取数据条数</param>        /// <param name="PageIndex">当前页是第几页</param>        /// <param name="strWhere">查询条件</param>        /// <returns></returns>        public IList<T> GetPageList(int PageSize, int PageIndex, string strWhere="")        {            return Dao.GetPageList(PageSize,PageIndex,strWhere);        }        /// <summary>        /// 根据数据字典父编码和编码获取名称        /// </summary>        /// <param name="parentNumber">父编码</param>        /// <param name="number">编码</param>        /// <returns></returns>        public string GetName(string parentNumber, string number)        {            return Dao.GetName(parentNumber, number);        }        /// <summary>        /// 获取该父编码下最大编码        /// </summary>        /// <param name="parentNumber">父编码</param>        /// <returns></returns>        public string GetMaxNumber(string parentNumber)        {            int max = Dao.GetMaxNumber(parentNumber);            return parentNumber + max.ToString().PadLeft(4, '0');        }    }}


  3.定义好了父接口,下面定义子接口,以T_RoleBLL为例,代码如下:

using System;using IBLL;using Model;namespace BLL{    public class T_RoleBLL : BLL<T_Role>,IT_RoleBLL    {    }}


这样,T_RoleBLL就拥有了BLL定义了的方法,如果T_RoleBLL有特殊方法,直接添加在T_RoleBLL里面即可。不过要注意,对ITRoleDAO要单独实例化,原因:BLL中实例化的IDAO<T>对象仅仅是拥调用IDAO中定义的方法,并不拥有单独在子类定义的方法。以T_AreaBLL为例,代码如下:

using IBLL;using IDAO;using Model;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace BLL{    public class T_AreaBLL : BLL<T_Area>,IT_AreaBLL    {        public IT_AreaDAO AreaDao { get; set; }        public int GenerateAreaNumber(string parentNumber)        {            return AreaDao.GenerateAreaNumber(parentNumber);        }    }}


  至于BLL中的Dao和T_AreaBLL中的AreaDao是如何被实例化的,我们在下一节再说!大家可以回忆一下DAO层中ISessionFactory对象SessionFactory是如何实例化的?这里用到了Spring.NET的依赖注入功能。最后,还是看一下BLL层的目录结构:





1 0
原创粉丝点击