[图解]企业应用架构模式2024新译本讲解07-表模块4

1
00:00:00,360 --> 00:00:07,030
这里面实际上就是通过一个方法,一个操作来封装了

2
00:00:08,790 --> 00:00:10,630
它不直接就操纵这里面

3
00:00:10,640 --> 00:00:12,070
不是直接把里面露出来

4
00:00:14,990 --> 00:00:20,430
产品ID进来,返回是产品类型

5
00:00:22,440 --> 00:00:23,660
产品类型,我们前面讲

6
00:00:23,670 --> 00:00:24,780
它是一个枚举的

7
00:00:26,150 --> 00:00:28,650
单独搞了个枚举来表示它

8
00:00:28,660 --> 00:00:31,890
这种封装

9
00:00:32,300 --> 00:00:33,690
什么时候用是值得的

10
00:00:34,760 --> 00:00:37,000
如果说你这里面是比较复杂的

11
00:00:37,530 --> 00:00:38,720
或者容易变化的

12
00:00:38,890 --> 00:00:40,480
封装可以,否则的话

13
00:00:40,860 --> 00:00:42,710
为了又多一个封装

14
00:00:42,980 --> 00:00:44,010
就不值得了

15
00:00:44,880 --> 00:00:45,540
 

1
00:00:00,590 --> 00:00:03,620
这里类型的话

2
00:00:05,870 --> 00:00:08,180
我们看它是哪一个

3
00:00:09,810 --> 00:00:11,780
这里写了,是D

4
00:00:12,460 --> 00:00:19,990
显然它跟这个是不等的

5
00:00:20,000 --> 00:00:20,270


6
00:00:22,960 --> 00:00:24,310
D跟这个也不等

7
00:00:25,060 --> 00:00:26,650
跳到下面来了

8
00:00:29,160 --> 00:00:29,540


9
00:00:29,550 --> 00:00:35,880
然后这里,跟前面封装一样

10
00:00:36,200 --> 00:00:38,710
把什么时候签约时间拿出来

11
00:00:39,870 --> 00:00:40,810
跟这里一样

12
00:00:46,080 --> 00:00:51,630
然后这里面我们前面讲过了

13
00:00:51,640 --> 00:00:58,340
它自己定义了一个分配金钱的一个操作

14
00:00:58,910 --> 00:00:59,950
你要把它分3份

15
00:01:00,840 --> 00:01:01,160
对吧

16
00:01:02,220 --> 00:01:03,530
分配在哪里

17
00:01:03,820 --> 00:01:04,770
就在这里

18
00:01:05,880 --> 00:01:07,640
就在这个合同类里面

19
00:01:07,650 --> 00:01:08,920
它定义了一个操作

20
00:01:09,730 --> 00:01:14,300
参数是金额、份数

21
00:01:17,710 --> 00:01:24,330
然后先定义了一个低值结果变量

22
00:01:25,290 --> 00:01:27,470
然后先把它分

23
00:01:27,480 --> 00:01:32,170
分完之后这里取整

24
00:01:34,370 --> 00:01:37,890
因为我们那个数值只能到分了

25
00:01:39,540 --> 00:01:41,760
比如说,你有7块钱

26
00:01:41,770 --> 00:01:43,080
你分3份怎么分呢

27
00:01:44,340 --> 00:01:45,660
你肯定分不了的

28
00:01:46,230 --> 00:01:47,740
最后你只能分到什么

29
00:01:48,360 --> 00:01:50,300
要么是2块

30
00:01:52,670 --> 00:01:55,270
2块、3块这样

31
00:01:55,280 --> 00:01:58,670
但这个肯定不是,因为这个是以元为单位的

32
00:01:59,530 --> 00:02:00,690
如果你是7分钱

33
00:02:00,820 --> 00:02:01,930
我们说7分钱的话

34
00:02:02,570 --> 00:02:04,300
只能分2、2、3

35
00:02:04,310 --> 00:02:06,420
估计已经是最接近的,没有办法了

36
00:02:07,190 --> 00:02:09,940
当然你是700块(口误)的话

37
00:02:10,190 --> 00:02:13,320
700分,7块钱就是700分的话

38
00:02:14,110 --> 00:02:15,100
700的话

39
00:02:15,110 --> 00:02:20,880
699算是可以分的

40
00:02:21,410 --> 00:02:24,070
699可以分,剩下1分怎么分

41
00:02:25,030 --> 00:02:26,270
剩下1分的话

42
00:02:26,280 --> 00:02:29,750
你只能分给某一个了

43
00:02:30,330 --> 00:02:33,550
有一个是得234的

44
00:02:33,560 --> 00:02:38,300
其它是233、233,这样分

45
00:02:38,310 --> 00:02:44,250
那么这个实际上就展示了这个过程

46
00:02:44,260 --> 00:02:45,130
低值结果,高值结果

47
00:02:45,140 --> 00:02:46,380
高值结果

48
00:02:46,390 --> 00:02:49,410
就是往上加一分钱了

49
00:02:51,100 --> 00:02:52,170
然后看余数

50
00:02:52,450 --> 00:02:53,520
看余数是多少

51
00:02:55,810 --> 00:02:57,530
然后余数前面的元素

52
00:02:57,740 --> 00:02:59,720
所以,余数是多少

53
00:03:00,210 --> 00:03:03,470
余数因为它就已经是整数了

54
00:03:04,590 --> 00:03:07,060
所以这里面的话,余数前面的元素

55
00:03:07,750 --> 00:03:11,380
就是高值的结果

56
00:03:11,910 --> 00:03:18,480
余数后面的元素就,这写错了

57
00:03:19,320 --> 00:03:20,530
标错了

58
00:03:20,920 --> 00:03:22,320
就用低值的结果

59
00:03:24,750 --> 00:03:28,150


60
00:03:36,310 --> 00:03:40,350
然后就把这三个插进去了

61
00:03:40,560 --> 00:03:41,790
怎么插入

62
00:03:41,920 --> 00:03:45,130
就调用这个表模块的

63
00:03:45,140 --> 00:03:47,080
一个插入的操作

64
00:03:50,690 --> 00:03:51,940
先定义一个新行

65
00:03:51,950 --> 00:03:54,480
然后取下一个ID

66
00:03:55,710 --> 00:03:58,290
之前那个作用

67
00:03:58,300 --> 00:04:02,160
你看,取下一个ID怎么实现的

68
00:04:03,580 --> 00:04:12,170
这里有一个锁,在这里定义,我们前面

69
00:04:13,550 --> 00:04:14,870
你看,定义了一个

70
00:04:15,120 --> 00:04:17,430
它类型就是对象

71
00:04:17,640 --> 00:04:19,670
一个静态的对象,就代表这个锁

72
00:04:22,680 --> 00:04:26,030
然后,你看这个是怎么做

73
00:04:27,880 --> 00:04:31,740
锁的目的就是为了保证原子操作

74
00:04:31,750 --> 00:04:35,360
就是说被锁住的这段里面的

75
00:04:35,370 --> 00:04:37,620
当然这里代码只有一行

76
00:04:38,350 --> 00:04:40,830
当然这一行里面可能它会分很多个指令了

77
00:04:40,840 --> 00:04:41,230
对不对

78
00:04:42,300 --> 00:04:45,710
就是说,如果有多个线程

79
00:04:46,410 --> 00:04:47,570
来执行这段代码

80
00:04:47,580 --> 00:04:50,090
如果A线程执行到

81
00:04:50,100 --> 00:04:52,470
这里面的时候,还没执行完

82
00:04:52,890 --> 00:04:54,680
B线程已经执行到这里了

83
00:04:57,040 --> 00:04:58,630
B线程执行到这里的时候

84
00:04:58,640 --> 00:05:00,190
它一看被锁住了

85
00:05:01,800 --> 00:05:03,480
有锁,它就等待

86
00:05:04,120 --> 00:05:05,250
等待A执行完了

87
00:05:05,260 --> 00:05:07,210
这个锁不存在了,被释放了

88
00:05:07,890 --> 00:05:10,420
保证多线程执行

89
00:05:11,170 --> 00:05:14,050
这段代码有多个线程

90
00:05:14,060 --> 00:05:15,050
同时执行的时候

91
00:05:16,810 --> 00:05:19,630
另外一个后面的线程

92
00:05:19,640 --> 00:05:21,470
要等待前面的线程

93
00:05:21,480 --> 00:05:22,990
把这一段执行完了

94
00:05:23,940 --> 00:05:25,210
把它释放出来了

95
00:05:26,850 --> 00:05:30,460
它才能够执行它的那一段程序

96
00:05:32,020 --> 00:05:34,120
这样才不会导致冲突

97
00:05:34,910 --> 00:05:37,020
像标识,我正在递增了

98
00:05:39,410 --> 00:05:41,020
原来那个数还没改

99
00:05:41,240 --> 00:05:43,650
结果你另外一个线程进来又递增一个

100
00:05:45,510 --> 00:05:48,220
最后得出来可能是两个一样的

101
00:05:48,230 --> 00:05:50,260
新的标识,冲突了

102
00:05:50,960 --> 00:05:53,160
所以你等我把递增做完了

103
00:05:54,440 --> 00:05:57,450
才能够轮到你来做下一步

104
00:05:59,240 --> 00:06:02,070
保证操作的原子性

105
00:06:04,470 --> 00:06:07,120
但这个的话我们自己来实现

106
00:06:08,270 --> 00:06:12,290
没有必要,最好是交给平台来做

107
00:06:12,460 --> 00:06:13,930
交给相应第三方

108
00:06:14,140 --> 00:06:20,610
不能写在我们这个领域的代码里面来

109
00:06:20,620 --> 00:06:21,210
不应该

110
00:06:22,320 --> 00:06:23,820
但这个是演示,无所谓了

111
00:06:25,900 --> 00:06:27,280
然后继续

1
00:00:01,260 --> 00:00:02,560
后面就是一样了

2
00:00:03,090 --> 00:00:03,760
ID

3
00:00:06,780 --> 00:00:13,590
一个字段一个字段往里面赋值

4
00:00:13,600 --> 00:00:16,410
赋好了,这一行就把它添加到

5
00:00:17,310 --> 00:00:20,190
Table的行的集合里面来

6
00:00:20,860 --> 00:00:22,570
实际上就是我们刚才类图上

7
00:00:24,800 --> 00:00:28,400
Table跟行之间的角色名

8
00:00:28,780 --> 00:00:32,040
添加,下面一样

1
00:00:00,360 --> 00:00:01,540
我们就一直运行

2
00:00:02,190 --> 00:00:05,280
后面一样

3
00:00:13,440 --> 00:00:14,550
计算完了

4
00:00:15,560 --> 00:00:21,240
实际上就是往表里面插入数据

5
00:00:22,290 --> 00:00:24,400
然后下面一样的

1
00:00:01,390 --> 00:00:02,310
你看,这一步

2
00:00:03,010 --> 00:00:07,800
我们现在是在主程序里面

3
00:00:08,140 --> 00:00:11,960
这一步就新建了一个收入确认的表模块

4
00:00:12,320 --> 00:00:14,260
然后调用这个表模块的操作

5
00:00:14,350 --> 00:00:16,990
我们来看怎么做

6
00:00:18,170 --> 00:00:22,840
构造,一样的

7
00:00:23,340 --> 00:00:25,140
前面都已经见过了

8
00:00:26,890 --> 00:00:28,610
好,接下来看,收入确认这个

9
00:00:33,290 --> 00:00:34,670
这个实际上就相当于

10
00:00:35,770 --> 00:00:39,930
传入的参数是合同ID

11
00:00:40,840 --> 00:00:42,940
这是某个日期

12
00:00:43,700 --> 00:00:45,260
那么通过这个来计算

13
00:00:45,270 --> 00:00:48,260
某合同、某日期之前已确认的收入

14
00:00:49,000 --> 00:00:52,500
相当于根据这个来查询,得到结果

15
00:00:55,340 --> 00:00:57,680
那么这里面查询的内容

16
00:00:57,690 --> 00:01:00,920
主要是在收入确认这个表里面

17
00:01:00,930 --> 00:01:06,890
所以操作就会放在这个表模块里面

18
00:01:08,230 --> 00:01:09,150
放在这里面

19
00:01:12,100 --> 00:01:16,280
跟我们的面向对象专家原则

20
00:01:16,890 --> 00:01:18,230
分配责任那个是类似的

21
00:01:20,190 --> 00:01:22,270
用到谁的数据最多

22
00:01:22,360 --> 00:01:26,570
那么它就有可能,最应该成为这个类的操作

23
00:01:30,300 --> 00:01:35,510
这里,首先第一步,就构建筛选条件

24
00:01:35,990 --> 00:01:37,480
构建一个查询条件了

25
00:01:38,140 --> 00:01:46,350
然后使用Table的一个操作

26
00:01:47,150 --> 00:01:50,400
select操作,然后把这个条件放进去

27
00:01:50,610 --> 00:01:51,880
筛选出符合条件的行

28
00:01:55,400 --> 00:01:58,400
得到这一行以后,它放到这里来了

29
00:01:58,530 --> 00:02:00,380
行的一个集合了

30
00:02:00,390 --> 00:02:07,280
然后它就根据这些行来累计行里面的字段

31
00:02:08,140 --> 00:02:09,280
金额

32
00:02:09,290 --> 00:02:10,640
金额字段累计起来

33
00:02:11,180 --> 00:02:12,210
但像这个的话

34
00:02:12,220 --> 00:02:15,640
如果是用SQL语句

35
00:02:15,650 --> 00:02:18,220
或者是用集合运算的

36
00:02:18,230 --> 00:02:19,900
像LINQ这样的语句的话

37
00:02:20,340 --> 00:02:23,230
直接用聚合函数就可以了

38
00:02:23,400 --> 00:02:26,530
没有必要让自己又单独搞一遍这样

39
00:02:26,540 --> 00:02:27,690
但没有关系

40
00:02:27,700 --> 00:02:31,350
这只是演示,聚合函数就可以了

41
00:02:32,240 --> 00:02:33,940
包括前面的所有的一切

42
00:02:34,880 --> 00:02:38,280
实际上,只要我们的表结构是合理的

43
00:02:38,410 --> 00:02:43,430
完全就可以通过一个查询语句把它写出来

44
00:02:43,600 --> 00:02:46,530
又这个,又那个,没有必要

45
00:02:48,090 --> 00:02:52,760
实际上最终的目的就是要做这个

46
00:02:52,770 --> 00:02:55,400
计算某合同某日期之前的已确认收入

47
00:02:55,950 --> 00:02:59,460
包括前面讲的,我们前面也说到过了

48
00:02:59,800 --> 00:03:01,750
写收入确认表都没有必要

49
00:03:01,760 --> 00:03:03,070
因为是冗余的数据

50
00:03:04,590 --> 00:03:07,610
我们就完全可以通过简单的

51
00:03:07,620 --> 00:03:11,260
这种标准的集合运算

52
00:03:12,950 --> 00:03:14,150
直接得到我们的结果

53
00:03:14,440 --> 00:03:17,010
这个我们最后再演示

54
00:03:18,550 --> 00:03:21,600
没有必要来这样做,但这个演示的话

55
00:03:23,250 --> 00:03:24,300
我们就按照书上这样

56
00:03:25,050 --> 00:03:25,870
来把它过一下

57
00:03:26,680 --> 00:03:30,830
来比较一下,自己来完成这个

58
00:03:30,840 --> 00:03:34,030
没有必要,好,得到结果了

59
00:03:34,690 --> 00:03:35,330


60
00:03:37,830 --> 00:03:41,740
然后这里就把它写到控制台

61
00:03:42,900 --> 00:03:46,010
控制台,就是这一行

62
00:03:47,010 --> 00:03:49,690
在这之前的收入是3333

63
00:03:51,020 --> 00:03:52,650
显然这是分3份了

64
00:03:53,570 --> 00:03:55,230
3333那三份

65
00:03:56,060 --> 00:03:58,730
后面可能就有3334什么的

66
00:04:01,200 --> 00:04:02,550
我们继续往下走

67
00:04:03,580 --> 00:04:05,540
先执行到这里

68
00:04:08,670 --> 00:04:14,400
好,我们看666.67,这是数据库

69
00:04:14,490 --> 00:04:19,840
另外两项就没有显示了

70
00:04:20,830 --> 00:04:22,350
这是数据库的

71
00:04:22,360 --> 00:04:23,630
这是电子表格的

72
00:04:24,760 --> 00:04:26,470
另外一个合同了,合同2

73
00:04:26,480 --> 00:04:27,650
合同3

74
00:04:31,530 --> 00:04:32,750
我们看合同3

75
00:04:36,690 --> 00:04:43,820
文字处理器的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/846787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL数据库】:MySQL内外连接

目录 内外连接和多表查询的区别 内连接 外连接 左外连接 右外连接 简单案例 内外连接和多表查询的区别 在 MySQL 中,内连接是多表查询的一种方式,但多表查询包含的范围更广泛。外连接也是多表查询的一种具体形式,而多表查询是一个更…

R语言绘图 --- 气泡图(Biorplot 开发日志 --- 4)

「写在前面」 在科研数据分析中我们会重复地绘制一些图形,如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包(Biorplot),用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。 相关链接…

【全开源】种草分享|动态朋友圈|瀑布流|uniapp

一款基于FastadminThinkPHP和Uniapp开发的种草分享评论点赞消息提醒系统,发布动态,分享种草生活,可以收藏关注点赞,消息提醒,同时支持H5/小程序/app多端。 ​让每一次互动都不再错过🔔 🌱 种草…

代码随想录算法训练营第二十五天| 216. 组合总和 III、17. 电话号码的字母组合

[LeetCode] 216. 组合总和 III [LeetCode] 216. 组合总和 III 文章解释 [LeetCode] 216. 组合总和 III 视频解释 题目: 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该…

Fiink的简单学习一

一 相关大数据概念 1.1 根据时间 1.实时计算: 数据实时处理,结果实时存储 是一种持续、低时延、事件触发的任务 2.离线计算: 数据延迟处理,结果N1模式(昨天的数据今天存储) 是一种批量、高时延、主动发起的计算任务 1.2 处…

算法金 | 再见,支持向量机 SVM!

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 一、SVM概述 定义与基本概念 支持向量机(SVM)是一种监督学习模型,用于解决分类和回归问题。它的核…

软件杯 题目:基于卷积神经网络的手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

基于springboot+vue的医院信息管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

HTML静态网页成品作业(HTML+CSS)—— 节日端午节介绍网页(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

Rust自动生成文件解析

目录 一、生成目录解析二、生成文件解析2.1 Cargo.toml2.2 main函数解析 一、生成目录解析 先使用cargo clean命令删除所有生成的文件,下图显示了目录结构和 main.rs文件 使用cargo new testrust时自动创建出名为testrust的Rust项目。内部主要包含一个src的源码文…

Qt——升级系列(Level Two):Hello Qt 程序实现、项目文件解析、

Hello Qt 程序实现 使用“按钮”实现 纯代码方式实现: // Widget构造函数的实现 Widget::Widget(QWidget *parent): QWidget(parent) // 使用父类构造函数初始化QWidget,传入父窗口指针, ui(new Ui::Widget) // 创建Ui::Widget类的实例,并…

切勿大意!痉挛性斜颈治疗中的三个重要“禁忌”,后果堪忧!

今天,要给大家讲一个非常重要的话题——痉挛性斜颈的治疗。痉挛性斜颈是一种常见的神经肌肉疾病,患者在日常生活中可能会遇到许多困扰和不便。因此,及早治疗对患者来说至关重要。 然而,在治疗痉挛性斜颈的过程中,千万切…

永磁同步电机高性能控制算法(12)——基于预测电流误差补偿的强鲁棒预测控制有限集预测控制与连续集预测控制的对比

1.文章简介 最近看到一篇比较有意思的文章,24年3月9日才刚刚收录。 众所周知模型预测控制受电机参数影响还是很大的。所以呢,各种观测器、参数辨识等算法都被用到预测控制中。 观测器设计的话就相对而言比较复杂;参数辨识也比较复杂&#x…

0基础学习Elasticsearch-使用Java操作ES

文章目录 1 背景2 前言3 Java如何操作ES3.1 引入依赖3.2 依赖介绍3.3 隐藏依赖3.4 初始化客户端(获取ES连接)3.5 发送请求给ES 1 背景 上篇学习了0基础学习Elasticsearch-Quick start,随后本篇研究如何使用Java操作ES 2 前言 建议通篇阅读再回…

MaxKey本地运行实战指南

MaxKey 本地运行总结 概述开发环境准备 主页传送门 : 📀 传送 概述 MaxKey单点登录认证系统,谐音为马克思的钥匙寓意是最大钥匙,是业界领先的IAM-IDaas身份管理和认证产品;支持OAuth 2.x/OpenID Connect、SAML 2.0、J…

记一次线上数据库连接超时异常问题

最近其他团队的开发人员告知我,我们项目有个feign接口调用失败了。我查看日志发现,其原因是尝试数据库连接超时,30秒内都没有连接成功。 我首先判断可能是网络不稳定,在一定时间内连接不上数据库。我登录到服务器环境看&#xff0…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第五周) - Transformer

Transformer 1. 注意力机制 在语言建模中,注意力(attention)是一个关键机制,用于在给定上下文中访问相关信息以进行预测。注意力机制允许模型根据输入上下文中的重要信息来加权关注不同的部分,并根据其重要性来决定对不同部分的关注程度。 …

【工具】探索 MOU:每用户通话时长

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 🎵 邓紫棋《光年之外》 什么是 MOU…

discuz点微同城源码34.7+全套插件+小程序前端

discuz点微同城源码34.7全套插件小程序前后端 模板挺好看的 带全套插件 自己耐心点配置一下插件 可以H5可以小程序

YOLOv1深入解析与实战:目标检测算法原理

参考: https://zhuanlan.zhihu.com/p/667046384 https://blog.csdn.net/weixin_41424926/article/details/105383064 https://arxiv.org/pdf/1506.02640 1. 算法介绍 学习目标检测算法,yolov1是必看内容,不同于生成模型,没有特别…