今天看了一些.net 三层框架,感觉BLL层只是从DAO层返回数据,没有其他的用处,如果说BLL是业务层,但是也没有事务控制,怎么处理批量业务呢,求大神指点迷津。
现在使用的三层大多是用于简单的数据检索,不存在什么业务逻辑,所以你在这里看不出这个层有什么用处,通常情况下界面层只负责接收和输出数据,在实际应用中可以会用到多层判断,数据封装等等,这些操作都是需要放在BLL层来进行处理的。
批量处理业务,给你一个思路,可以通过界面获取到的多个业务数据,在BLL层进行组装,传入Dao层中进行处理,在Dao层你可以直接获取到当前数据库的事务。
BLL层
SelectUser(UserInfo userInfo)根据传入的username或email得到用户详细信息。
IsExist(UserInfo userInfo)判断指定的username或email是否存在。
然后DAL也相应提供方法共BLL调用
SelectUser(UserInfo userInfo)
IsExist(UserInfo userInfo)
这样BLL确实只起到了一个传递的作用。
但如果这样做:
BLL.IsExist(Userinfo userinfo)
{
UerInfo user = DAL.SelectUser(User);
return (userInfo.Id != null);
}
那么DAL就无需实现IsExist()方法了,BLL中也就有了逻辑处理的代码。
BLL即业务逻辑层,主要表示WEB方式,也可以表示成WINFORM方式。如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理。如果说数据层是积木,那逻辑层就是对这些积木的搭建。无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。例如Martin Fowler在《Patterns of Enterprise Application Architecture》一书中,将整个架构分为三个主要的层:表示层、领域层和数据源层。作为领域驱动设计的先驱Eric Evans,对业务逻辑层作了更细致地划分,细分为应用层与领域层,通过分层进一步将领域逻辑与领域逻辑的解决方案分离。
储过程
海量数据分批处理(就像分页原理)
三层框架中的BLL层是处理业务逻辑层,为什么要采用中间层呢?若是在UI层直接访问数据层,在空间上或效率上都存在不足,这时就需要中间层BLL的出现,效率上更高,处理逻辑业务上更好;至于深入业务逻辑层的过程中,会考虑Factory工厂类的应用,主要是通过映射的关系访问数据层,希望能给你帮助。
三层结构是一种严格分层方法,即数据访问层(DAL)只能被业务逻辑层(BLL)访问,业务逻辑层只能被表示层(USL)访问,用户通过表示层将请求传送给业务逻辑层,业务逻辑层完成相关业务规则和逻辑,并通过数据访问层访问数据库获得数据,然后按照相反的顺序依次返回将数据显示在表示层。有的三层结构还加了Factory、Model等其他层,实际都是在这三层基础上的一种扩展和应用.
一个简单的三层结构程序一般包括DAL BLL WEB Model几个项目,它们的相互引用关系如下
1) WEB引用 BLL,Model
2)BLL引用 DAL,Model
3)DAL引用Model
4)Model无引用
业务逻辑层,简单来说一些数据校验、逻辑都可以放在这里实现
BLL简单的说就是业务逻辑层,
是DAL(Data Access Layer,数据访问层)和UI(User Interface)层的连接桥梁.检查数据的合法性,
生成数据查询的相关条件和事务控制
举个例子:
饭店的优惠方案,满100元就打9折,不满100不打折
web页面提供文本框等让员工输入金额,然后调用bll层的方法;
那bll层就是检查金额是否满100,再把实际金额调用dal层存入数据库;
dal就是把金额插入数据库,不检查
BLL是业务层,处理业务方法,调用数据层;达到前端和后端数据分开调用功能
简单的说,分层只是为了更加清晰,举个例子来说
出纳负责发放工资(DAL)
至于工资怎么计算,给谁多少工资,这是HR或者部门主管的事情。(BLL= Business Logical Layer)
BLL业务逻辑层,放些增删改查的方法。
BLL 层使用事务
using System.Transactions;
bool success = false;
using (TransactionScope ts = new TransactionScope())
{
int result0 = _IBaseDAL.myExecuteNonQuery(new SQLExecuteCommon
{
operate_type = 0,
table_name = PropertyConst.TableName.ecs_order_info,
set_param = set_param,
where_param = where_param
});
int result1 = _order_action_dal.InsertOrderAction(ecs_order_action);
success = result0 > 0 && result1 > 0;
if (success)//超出using块没有提交事务则自动回滚 没有失败 提交事务
{
ts.Complete();
}
}
return success;
BLL为业务层,简单来讲,就是和对应表相关的业务调用入库,比如有一张是学生的成绩表,有一张是教师成员表,学生成绩表中的业务肯定有排序,教师成员表则不一定有。所以学生成绩表中的BLL层相关业务中必然有排序业务,而教师成员表中则未必需要有。