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

  本节讲解业务逻辑层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层的目录结构:





  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值