『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层的目录结构:
- 『Spring.NET+NHibernate+泛型』框架搭建之BLL(四)
- 『Spring.NET+NHibernate+泛型』框架搭建之Model(二)
- 『Spring.NET+NHibernate+泛型』框架搭建之DAO(三)★
- 『Spring.NET+NHibernate+泛型』框架搭建之WebUI(五)★
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (四)配置全攻略
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (四)配置全攻略(转)
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (一)搭建你的环境
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (一)搭建你的环境
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (一)搭建你的环境
- asp.net NHibernate Spring.net 框架搭建(开源)
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (二)创建你的项目
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (二)创建你的项目
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (五)测试你的成果
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (六)写在后面的话
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (一)
- Spring.net + Nhibernate 框架 配置
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (二)创建你的项目(转)
- 搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (五)测试你的成果(转)
- android 百度地图marker 设置锚点 让图标的下方尖尖指向实际位置
- android请求网络——第三方库android-async-http的使用(1)
- Error:svn: E175002: connection refused by the server svn: E175002: OPTIONS request failed on '
- 虚拟化容器技术Docker
- C语言文件操作
- 『Spring.NET+NHibernate+泛型』框架搭建之BLL(四)
- hdu-5000 Clone(DP+数学)
- Jq实现重叠效果-实现无限级分类树形中js 的折叠效果
- LeetCode218:The Skyline Problem
- 运算符重载
- caffe初体验——ubuntu下配置caffe
- Logistic Regression 模型简介
- POJ题目分类
- JavaScript之复选框的全选,全不选