基础才是重中之重~Data层如何调用BLL层的方法,如果觉得奇怪请看本文章

简介:

看似不伦不类

这个题目有点不伦不类,或者说有点伪模式了,不错,确实是这样,我们正确的开发思维是WEB层->BLL层->DATA层,每个层有对它下层的引用,下层不能引用上层,因为这会出现相互引用的错误,在实际工作中,BLL层会有涉及到各个业务的代码组织,实现数据持久化一般在Data层完成,这是可以理解的,也是我们经常使用的开发模式,这当然不是今天的重点,今天主要说一个实际问题,如订单处理的场合.

一般订单处理流程如下:

1 用户选择商品到购物车

2 用户确定购买,生成订单

3 选择一种或者几种支付方式

4 支付完成,回写订单,修改订单状态

5 支付交易成功,或者失败

OK,这种订单业务事实上是很复杂了,它会涉及到很多表的操作,它可能由多个开发人员去编写,最后进行统一组合,而为了保证数据的有效性,我们会把代码重装到事务里,这时问题就来了

当你的订单主方法在data层实现,如何去调用bll已经写好的方法呢?我们总不能再重新写一个吧,当然不能,相同的代码不能出现两次,这是我们的原则,呵呵.

方法回调

概念:我们在一个方法里处理事件,事件处理完成后,再调用原方法层次的某个方法,这种调用,我们可以称为回调方法,它可以通过委托来实现,而对于如今的业务,我们也可以通过这种方式来实现,看一下DEMO

这是我们的data层方法签名:

public void GeneratorOrder(List<Order_Info> list, Action<IUnitOfWork, int, int> authorizeClassroom)

我们看到,它的参数里有个Action委托,它有三个参数,这个方法是通过BLL层传递进来的,当data层的工作完成后,可以回调这个BLL的方法,我们看一下BLL层这个方法的签名:

  void AuthorizeClassroom(IUnitOfWork db, int userID, int classroomID)

看一下,BLL层去调用data层方法,将把委托实例以参数的形式传入data层

orderInfoRepository.GeneratorOrder(list, AuthorizeClassroom);

最后,使用我们的事务,把它们组合到一起(BLL层与Data层使用同一个事务,注意,它不是分布式事务,前提是它们的数据上下文是一个)

   TransactionScopeNoMsdtc.UsingNoMsdtc(Db, true, () =>
          {
             ...
          }

最后,通过SQL监视工作看到的结果就是它们处在同一事务块里,呵呵.

本文转自博客园张占岭(仓储大叔)的博客,原文链接:基础才是重中之重~Data层如何调用BLL层的方法,如果觉得奇怪请看本文章,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
前端开发 API 数据库
fastadmin框架调用model层的方法
fastadmin框架调用model层的方法
83 0
|
9月前
|
SQL 前端开发 Java
DAO层和Service层的究极理解--这波我在大气层
DAO层和Service层的究极理解--这波我在大气层
141 0
|
JavaScript vr&ar 开发者
综合案例(controller层编写) | 学习笔记
快速学习综合案例(controller层编写)。
111 0
|
SQL Java 数据库连接
数据层设计与开发(数据层标准实现类) | 学习笔记
简介:快速学习数据层设计与开发(数据层标准实现类)
126 0
数据层设计与开发(数据层标准实现类) | 学习笔记
|
开发者
数据层设计与开发(数据层工厂类) | 学习笔记
简介:快速学习数据层设计与开发(数据层工厂类)
82 0
数据层设计与开发(数据层工厂类) | 学习笔记
|
数据库 开发者
数据层设计与开发(定义数据层标准) | 学习笔记
简介:快速学习数据层设计与开发(定义数据层标准)
155 0
数据层设计与开发(定义数据层标准) | 学习笔记
|
前端开发 .NET 数据库
一起谈.NET技术,使用View Model从表现层分离领域模型
MVC架构模式是近年来编程世界里最长被提及的模式之一,Model-View-Controller(模型-视图-控制器,MVC) 模式将你的软件组织并分解成三个截然不同的角色: Model 封装了你的应用数据、应用流程和业务逻辑。
958 0
|
SQL 存储 数据库
其实添加数据也可以这样简单——表单的第一步抽象(针对数据访问层)《怪怪设计论: 抽象无处不在 》有感
更正:不好意思,昨天晚上思路有点混乱。有几个前提忘记说明了,现在补充一下。 1、缩小范围。按照由简到难的思路,这里先讨论最简单的添加数据的情况。就是单表的添加和修改;这里讨论的是webform的情况。
1067 0