基础才是重中之重~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层的方法,如果觉得奇怪请看本文章,如需转载请自行联系原博主。

目录
相关文章
|
8月前
|
人工智能 缓存 算法
轻创优选视频号爆单系统的开发
电商运营和自动化技术的综合项目,旨在通过高效的内容分发、精准的用户触达和智能化的运营策略,实现商品快速销售和流量变现
|
缓存 Cloud Native 区块链
重塑链上数据索引,Chainbase 云原生 Subgraph 解析
Subgraph 是 The Graph 去中心化应用索引协议的具体实现, 能为各个智能合约创建索引引擎,提供 dataset 数据集供开发者快速查询使用。目前,Chainbase 正式上线并托管的核心 dataset subgraph 数量已经超过 100+。
752 0
重塑链上数据索引,Chainbase 云原生 Subgraph 解析
|
8月前
|
边缘计算 安全 调度
在线新高度:阿里云如何构建安全丝滑出海体验
在线新高度:阿里云如何构建安全丝滑出海体验
189 0
|
11月前
|
敏捷开发 Java 测试技术
软件测试中的自动化策略与实践
在快速迭代的软件开发周期中,自动化测试是确保产品质量和提升开发效率的关键。本文将深入探讨自动化测试的重要性,介绍实用的自动化测试框架,并通过一个具体的代码示例,说明如何实现一个简单的自动化测试脚本。
96 12
|
12月前
|
存储 前端开发 Java
Kotlin教程笔记(18) - 数据类
本教程笔记详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习需求,推荐查看“简洁”系列教程。本文重点介绍了Kotlin中的数据类(data class),包括其自动生成的`componentN`方法、`toString()`、`copy()`等方法,以及如何通过allOpen和noArg插件解决data class默认final和无参构造函数的问题。
94 0
|
SQL 存储 OLAP
ClickHouse为什么这么火?
ClickHouse为什么这么火?
|
人工智能 算法 Cloud Native
向量数据库小白必关注的“扫盲贴”来啦
自从ChatGPT问世以来,大语言模型受到广泛关注。但大模型更新频率低且不擅长垂直领域知识,向量数据库恰好可以与之互补,通过Retrieval Plugin为大模型和企业私有数据构建了一座桥梁,成为数据面向大模型的切入口。不过,你真的了解向量吗?什么又是向量数据库呢?向量检索的原理又是什么呢?向量爱好者们速速上车,跟着小编一起开启“向量探索之旅”吧!
4470 4
向量数据库小白必关注的“扫盲贴”来啦
|
SQL 存储 关系型数据库
PolarDB IMCI助力聚水潭数据中台极致体验,实现百亿级订单实时分析
聚水潭成立于2014年,以电商SaaS ERP切入市场,凭借出色的产品和服务,快速获得市场领先地位。
PolarDB IMCI助力聚水潭数据中台极致体验,实现百亿级订单实时分析
|
监控 安全
AutoSAR E2E自学笔记
AutoSAR E2E自学笔记
AutoSAR E2E自学笔记
|
域名解析 缓存 负载均衡
域名
域名是互联网上某一台计算机或计算机组的名称。域名可以说是一个 IP 地址的代称,目的是为了便于记忆。 通过阅读本篇文章,你可以了解到: 1、域名的结构; 2、域名的解析过程; 3、记录类型(A记录、CNAME记录 等) 4、域名的应用
2205 0
域名