[图解]企业应用架构模式2024新译本讲解02-表数据入口

1
00:00:00,420 --> 00:00:04,330
这个案例,我们就是用书上的案例了

2
00:00:06,080 --> 00:00:08,860
收入确认的一个案例

3
00:00:09,510 --> 00:00:11,100
书上讲了,收入确认

4
00:00:13,330 --> 00:00:15,270
就是说,你给了钱

5
00:00:15,960 --> 00:00:18,200
但这个钱本身还不能够直接入账

6
00:00:18,210 --> 00:00:24,500
因为这个钱最终是不是能够收进来

7
00:00:25,980 --> 00:00:27,930
这要看服务的进展

8
00:00:27,940 --> 00:00:30,290
这是预付款

9
00:00:30,940 --> 00:00:33,250
定金或者预付款

10
00:00:36,380 --> 00:00:38,500
所以就有一个要把这笔钱

11
00:00:39,250 --> 00:00:41,570
分成很多笔来入账的

12
00:00:42,800 --> 00:00:45,700
这样的一个会计的做法

13
00:00:48,760 --> 00:00:52,940
他这里就设置了一个比较简单的场景

14
00:00:53,620 --> 00:00:55,700
不同类型的产品

15
00:00:56,690 --> 00:00:59,580
入账的方式不一样

16
00:00:59,590 --> 00:01:03,480
比如说,如果是文字处理软件的,就直接入账

17
00:01:03,940 --> 00:01:06,300
如果是电子表格的Excel什么之类的

18
00:01:07,060 --> 00:01:09,050
这样来分几笔入账

19
00:01:09,660 --> 00:01:13,760
数据库软件就这样

20
00:01:16,450 --> 00:01:21,520
这是书里面给出来的类图

21
00:01:22,040 --> 00:01:23,310
产品,然后这里有一个产品类型

22
00:01:23,990 --> 00:01:27,190
它这是简化了,直接一个普通属性

23
00:01:28,620 --> 00:01:30,790
如果要严格应该有一个

24
00:01:31,360 --> 00:01:32,590
产品类型

25
00:01:33,600 --> 00:01:36,530
合同,收入确认

26
00:01:39,400 --> 00:01:41,140
合同有两个属性

27
00:01:41,150 --> 00:01:42,700
一个签约时间

28
00:01:43,440 --> 00:01:46,510
收入,收入确认

29
00:01:46,520 --> 00:01:49,480
这个是相当于把收入分成几笔

30
00:01:50,270 --> 00:01:52,740
这是它的数量(数额),比如分三笔

31
00:01:53,390 --> 00:01:55,060
你收入300

32
00:01:55,310 --> 00:01:56,660
三笔就是每笔100

33
00:01:57,140 --> 00:01:59,100
然后这是入账的时间

34
00:01:59,990 --> 00:02:07,590
这样来

35
00:02:07,600 --> 00:02:11,360
这个是书里面给出的序列图

36
00:02:11,770 --> 00:02:13,400
你看,这有个service

37
00:02:14,860 --> 00:02:17,650
就是刚才类图上面定义的那个类

38
00:02:22,310 --> 00:02:27,710
然后这是Gateway,入口类

39
00:02:28,760 --> 00:02:31,230
然后这是事务脚本操作

40
00:02:32,090 --> 00:02:38,300
查找合同,返回来之后,取数据

41
00:02:38,310 --> 00:02:40,690
然后这里生成

42
00:02:40,900 --> 00:02:44,680
在这个Recognition,收入确认

43
00:02:44,690 --> 00:02:46,600
这个表里面插入一行

44
00:02:48,860 --> 00:02:51,300
插入多行,这里打个星星表示

45
00:02:51,310 --> 00:02:53,600
这个是多个

46
00:02:53,610 --> 00:02:54,960
执行多次的一个操作

47
00:02:56,860 --> 00:03:01,850
实际上,从描述的业务的情况看

48
00:03:02,100 --> 00:03:03,130
实际上这个类图

49
00:03:04,740 --> 00:03:08,180
包括这个序列图都是没有必要的

50
00:03:11,550 --> 00:03:15,380
首先这个就是冗余的,不需要

51
00:03:17,520 --> 00:03:17,950
为什么

52
00:03:18,360 --> 00:03:22,760
你看,收入是算出来的

53
00:03:22,770 --> 00:03:26,050
是根据这个算出来的

54
00:03:27,920 --> 00:03:29,520
既然是可计算的

55
00:03:31,240 --> 00:03:33,340
那么显然它就是冗余的

56
00:03:35,920 --> 00:03:37,560
如果你只是为了把它算出来

57
00:03:37,570 --> 00:03:39,240
把它填到这个表里面

58
00:03:41,750 --> 00:03:44,100
你干嘛要算出来事先填好呢

59
00:03:45,390 --> 00:03:46,790
等他需要的时候再算

60
00:03:46,800 --> 00:03:48,970
不就完了

61
00:03:49,410 --> 00:03:50,550
你单独把它算出来

62
00:03:50,560 --> 00:03:52,870
填到这个表里面,这一步就是冗余的

63
00:03:55,050 --> 00:03:57,270
就像我们生成报表一样

64
00:03:58,630 --> 00:04:01,230
假设你在没有人看的情况下

65
00:04:01,240 --> 00:04:02,750
你事先生成报表

66
00:04:04,420 --> 00:04:06,300
然后有人看了,直接看报表

67
00:04:07,990 --> 00:04:09,340
这个是冗余的,为什么

68
00:04:11,540 --> 00:04:13,640
因为这个报表的数据既然可以生成

69
00:04:13,650 --> 00:04:14,480
那应该是什么

70
00:04:14,950 --> 00:04:16,110
在有人看的时候

71
00:04:16,120 --> 00:04:17,630
再现场算

72
00:04:17,640 --> 00:04:19,590
然后生成,反馈给他看

73
00:04:21,290 --> 00:04:22,930
这样,逻辑上才没有冗余

74
00:04:24,200 --> 00:04:27,330
如果你事先生成了放那里,那就是冗余的

75
00:04:28,530 --> 00:04:29,840
为什么要引入冗余

76
00:04:30,300 --> 00:04:32,930
只有一个理由,就是你在性能上考虑

77
00:04:34,010 --> 00:04:37,550
如果说,现场当时算的话,可能会比较慢

78
00:04:38,160 --> 00:04:39,180
我事先算好了

79
00:04:39,190 --> 00:04:41,530
放那里,你直接去查那个表

80
00:04:42,810 --> 00:04:44,480
或者访问类的对象

81
00:04:46,210 --> 00:04:47,100
只有这个理由

82
00:04:47,960 --> 00:04:50,550
但为了性能带来冗余

83
00:04:51,370 --> 00:04:53,340
我们前面课程也说了

84
00:04:54,020 --> 00:04:55,090
必须要很谨慎的

85
00:04:55,260 --> 00:04:57,810
但很多人就把这个当成无能的遮羞布

86
00:05:01,590 --> 00:05:03,830
他根本就不觉得这有什么不妥

87
00:05:03,840 --> 00:05:05,030
也不觉得有什么冗余

88
00:05:06,400 --> 00:05:07,940
也不知道冗余有什么危害

89
00:05:10,770 --> 00:05:13,130
然后跟他说,他说万一有性能问题

90
00:05:14,900 --> 00:05:16,530
他就把这个拿出来做理由

91
00:05:18,610 --> 00:05:21,320
Martin Fowler这里也不例外

92
00:05:21,930 --> 00:05:22,840
包括后面Fowler

93
00:05:22,850 --> 00:05:25,520
还有其他一些处理也是有问题的

94
00:05:25,530 --> 00:05:28,090
后面案例我们也会提到

95
00:05:29,690 --> 00:05:36,580
那应该怎么做,应该是建模它的规则

96
00:05:40,360 --> 00:05:41,280
产品类型

97
00:05:41,840 --> 00:05:42,400
什么规则

98
00:05:42,490 --> 00:05:44,720
就是Fowler这里说的规则

99
00:05:46,270 --> 00:05:50,720
某种类型的产品,它应该分几份入账

100
00:05:51,330 --> 00:05:53,470
入账的间隔是多少天

101
00:05:54,040 --> 00:05:54,660
就可以了

102
00:05:54,670 --> 00:05:59,370
比如说,类型是电子表格的,分三份入账

103
00:06:01,900 --> 00:06:07,020
那么份数就是3,间隔就是30天

104
00:06:07,830 --> 00:06:08,110

105
00:06:09,270 --> 00:06:10,310
记住这个规则

106
00:06:10,320 --> 00:06:11,910
这才是本质

107
00:06:14,270 --> 00:06:14,990
应该建模的是这个

108
00:06:16,400 --> 00:06:18,130
或者说,再详细一点

109
00:06:18,140 --> 00:06:19,530
分几次

110
00:06:19,540 --> 00:06:21,630
每次多少份额

111
00:06:21,920 --> 00:06:23,430
份额不一定是平均的

112
00:06:24,340 --> 00:06:25,380
可以分很多份

113
00:06:25,390 --> 00:06:28,060
可以先放10%

114
00:06:28,150 --> 00:06:29,660
下次放20%

115
00:06:30,020 --> 00:06:32,380
下一次放30%,这样都可以

116
00:06:35,800 --> 00:06:37,470
应该建模规则

1
00:00:00,320 --> 00:00:03,100
为什么Fowler这里是这样做

2
00:00:03,110 --> 00:00:04,660
还有另外一个原因就是

3
00:00:05,160 --> 00:00:08,110
他没有把这个规则概念提炼出来

4
00:00:08,120 --> 00:00:11,080
而是把它写在代码里面变成硬编码

5
00:00:12,420 --> 00:00:15,590
我们一会看一下案例

6
00:00:16,250 --> 00:00:20,920
我在网上找了一个复刻的案例的代码

7
00:00:21,310 --> 00:00:24,280
因为Fowler书里面

8
00:00:24,290 --> 00:00:25,880
他给出了代码片段

9
00:00:25,890 --> 00:00:27,560
但代码片段本身

10
00:00:28,070 --> 00:00:29,950
并不是直接能执行的

11
00:00:32,160 --> 00:00:37,680
我找了一个模仿书上的案例

12
00:00:37,690 --> 00:00:40,550
复刻的,下载地址在这里

13
00:00:41,380 --> 00:00:43,790
如果有更好的,大家也可以去找更好的

14
00:00:44,230 --> 00:00:48,480
我找到的这个,是用C#

15
00:00:49,340 --> 00:00:56,260
然后用SQLite作为存储,表结构

16
00:00:56,510 --> 00:00:59,500
它跟这里面是一致的了

17
00:01:00,360 --> 00:01:01,790
三个类,三个表

18
00:01:03,360 --> 00:01:05,560
然后,1对多

19
00:01:05,570 --> 00:01:10,750
所以这里面1方放在多方作为外键

20
00:01:11,960 --> 00:01:17,950
而这个,它使用了一个复合主键,在这里

21
00:01:18,610 --> 00:01:22,910
这边合同的ID

22
00:01:23,430 --> 00:01:27,090
和入账时间的ID(口误)

23
00:01:27,100 --> 00:01:29,620
入账时间

24
00:01:29,630 --> 00:01:32,170
这两个结合在一起

25
00:01:32,180 --> 00:01:33,450
一个复合主键

26
00:01:34,340 --> 00:01:40,590
这个的话可以,就是说,意思就是什么

27
00:01:41,130 --> 00:01:47,010
相当于把这个看作是一个组合的关系了

28
00:01:50,930 --> 00:01:51,760
组合关系

29
00:01:52,650 --> 00:01:53,510
实心菱形

30
00:01:55,110 --> 00:01:55,820
为什么组合

31
00:01:55,830 --> 00:02:01,330
你看,这个是主键

32
00:02:03,050 --> 00:02:04,290
这是主键,PK

33
00:02:05,190 --> 00:02:06,180
那么意味着什么

34
00:02:06,540 --> 00:02:08,270
它不是外键,它是主键

35
00:02:08,280 --> 00:02:10,870
意味着一旦这个合同要是消失了

36
00:02:11,430 --> 00:02:13,580
这里肯定也得消失

37
00:02:14,350 --> 00:02:15,570
你主键都没有了

38
00:02:17,550 --> 00:02:18,630
但这个外键就不一样

39
00:02:18,640 --> 00:02:23,490
你看这个外键

40
00:02:24,530 --> 00:02:30,390
在这里,那么这个消失了

41
00:02:30,850 --> 00:02:31,920
这个会不会消失

42
00:02:33,210 --> 00:02:37,380
这个严格来说你消失这个产品消失了

43
00:02:39,070 --> 00:02:46,000
那么这个合同它引用那个产品不在了

44
00:02:46,010 --> 00:02:47,970


45
00:02:47,980 --> 00:02:50,450
但是信息保留下来

46
00:02:52,830 --> 00:02:54,270
它还是可以保留下来的

47
00:02:54,970 --> 00:02:57,180
只不过引用空掉了

48
00:02:58,160 --> 00:03:00,120
而这个本身它是在物理上

49
00:03:00,130 --> 00:03:01,800
你数据库里面就不能存在

50
00:03:01,810 --> 00:03:04,430
因为你主键这个都被删掉了

51
00:03:04,600 --> 00:03:07,630
你不是外键,你外键可以为空

52
00:03:07,640 --> 00:03:08,710
你主键怎么为空

53
00:03:12,450 --> 00:03:15,230
所以可以这样来理解

54
00:03:16,360 --> 00:03:20,230
下面这个都跟这个一致了

55
00:03:20,600 --> 00:03:22,030
它再加了一个名称

56
00:03:23,090 --> 00:03:24,030
加了一个名称

57
00:03:26,540 --> 00:03:28,390
我们来看一下它的代码

1
00:00:01,300 --> 00:00:03,050
这个就是它的代码

2
00:00:03,870 --> 00:00:05,710
你看,右边这个很简单

3
00:00:05,720 --> 00:00:07,790
就这么几个类 DBManager

4
00:00:07,800 --> 00:00:08,750
然后Gateway

5
00:00:09,630 --> 00:00:12,530
然后Service

6
00:00:12,660 --> 00:00:14,010
RecognitionService

7
00:00:14,700 --> 00:00:16,800
然后还有一个主程序就是

8
00:00:16,810 --> 00:00:18,960
它是控制台的程序,main这里

9
00:00:19,670 --> 00:00:22,090
然后这里,控制台写出来

10
00:00:22,100 --> 00:00:23,610
命令行写出来,就完了

11
00:00:28,140 --> 00:00:31,930
我们来看它的几个类,DbManager

12
00:00:31,940 --> 00:00:33,170
就定义了一个连接

13
00:00:33,260 --> 00:00:36,390
这里指明了数据库的位置

14
00:00:36,560 --> 00:00:38,870
就在它同一个目录下面

15
00:00:39,310 --> 00:00:40,950
SQLite就很简单

16
00:00:40,960 --> 00:00:42,670
就一个DB文件就完了

17
00:00:44,890 --> 00:00:50,230
然后Gateway,就是刚才说的入口

18
00:00:52,610 --> 00:00:57,070
然后,service就是事务脚本类

19
00:00:58,220 --> 00:00:58,650
类是这个

20
00:00:59,060 --> 00:01:06,170
定义了一些,这是计算插入

21
00:01:06,670 --> 00:01:08,400
然后这个是查询的了

22
00:01:08,410 --> 00:01:09,720
查询返回的

23
00:01:15,600 --> 00:01:16,670
就这么多

24
00:01:17,030 --> 00:01:18,300
我们运行看一下

25
00:01:18,310 --> 00:01:20,970
我们随便打一个断点

26
00:01:21,420 --> 00:01:24,870
前面这一段一开始就是填充数据了

27
00:01:24,880 --> 00:01:27,430
它这个案例就直接在这里填充数据了

28
00:01:29,050 --> 00:01:31,360
可以把数据填进去,这么几个数据填进去

29
00:01:32,040 --> 00:01:34,350
前面都是做预热的

30
00:01:34,360 --> 00:01:36,150
包括创建表什么,都在这里

31
00:01:36,820 --> 00:01:38,410
这段不用管

32
00:01:38,500 --> 00:01:39,690
直接在哪里,在这里

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

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

相关文章

一文搞透常见的Python编码陷阱(下)(分析+案例)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 一、当心多目标赋值中的可变变量 示例 扩展讲解 示例 增广赋值中的可变变量 示例 扩展讲解 示例 总…

Python魔法之旅-魔法方法(01)

目录 一、概述 1、定义 2、作用 二、主要应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类…

window安装ffmpeg播放本地摄像头视频

1、安装ffmpeg ffmpeg官方网站:FFmpeg 下载后解压文件夹名为ffmpeg 2、设置环境变量 目录 1、安装ffmpeg 设置环境变量 以F:\software\after\ffmpeg\bin为例 在命令行中输入ffmpeg出现下方代表安装成功 3、通过ffmpeg播放本地电脑摄像头 鼠标右击开始按钮&…

计算机设计大赛

目录 1.1需求分析 2.1概要设计 3.1软件界面设计: 4.1代码开源 1.1需求分析 1.1 产品开发本说明: 在如今每人都会扔出许多垃圾,在一些地方大部分垃圾能得到卫生填埋、焚烧等无害化处理,而更多的垃圾则是简单的掩埋&#xff…

范罗士、希喂、安德迈爆款宠物空气净化器哪款好?深度对比测评

作为一名深受养猫过敏困扰的铲屎官,我经常提醒新手铲屎官重视家里的空气环境。宠物的浮毛和皮屑不仅会引发过敏,还可能传播细菌和病毒。很多人以为普通空气净化器能解决问题,但这些产品并未针对宠物家庭的特殊需求。经过多次研究和测试&#…

一些Spring的理解

说说你对Spring的理解 首先Spring是一个生态:可以构建企业级应用程序所需的一切基础设施 但是,通常Spring指的就是Spring Framework,它有两大核心: IOC和DI 它的核心就是一个对象管理工厂容器,Spring工厂用于生产Bea…

定积分的应用

目录 前提知识 考题类型:平面图形面积、旋转体体积、旋转体侧面积、平面曲线弧长 两种坐标:极坐标和直角坐标系 求解思路: 注意: 1:平面图形的面积: 常见模型: 面积元素的两种表达:积分区…

Postman入门 - 环境变量和全局变量

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、发送请求 二、设置并引用环境变量 比如:我建的这个生产环境 使用环境有两个方式&…

弘君资本炒股技巧:股票定向增发是什么意思?是好是坏?

股票定向增发是指已上市的公司向指定的组织或者个人投资者额外发行股份募集资金的融资方法,发行价格为发行前某一阶段的平均价的必定比例,增发的价格不得低于前二十个买卖日股票均价的80%。 例如,个股定增前二十个买卖股票平均价为…

平方回文数-第13届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第73讲。 平方回文数&#…

电脑记事软件哪款安全?好用且安全的桌面记事工具

在快节奏的现代生活中,我们每天都要用电脑处理大量的工作。电脑不仅提升了工作效率,还成为了我们记录重要事项和灵感的得力助手。比如,在策划项目时,我会直接在电脑上列出要点和步骤;在开会时,我也会用电脑…

Python代码:二十一、增加派对名单(二)

1、题目 描述 为庆祝驼瑞驰在牛爱网找到合适的对象,驼瑞驰通过输入的多个连续字符串创建了一个列表作为派对邀请名单,在检查的时候发现少了他最好的朋友“Allen”的名字,因为是最好的朋友,他想让这个名字出现在邀请列表的最前面…

python打造自定义汽车模块:从设计到组装的全过程

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、定义汽车模块与核心类 三、模拟汽车组装过程 四、抽象与封装 五、完整汽车…

物联网应用系统与网关

一. 传感器底板相关设计 1. 传感器设计 立创EDA传感器设计举例。 2. 传感器实物图 3. 传感器测试举例 测试激光测距传感器 二. 网关相关设计 1. LORA,NBIOT等设计 2. LORA,NBIOT等实物图 3. ZigBee测试 ZigBee测试 4. NBIoT测试 NBIoT自制模块的测试…

vue3-api之provide与inject

传值&#xff1a; 父组件 > 子组件 > 孙组件 // 父组件 <template><div class"app"><h3>我是app组件(祖) --- {{ name }} {{ price }}</h3><child /></div> </template><script> import { reactive, toRefs,…

【LaTex】11 ACM参考文献顺序引用 - 解决 ACM-Reference-Format 顺序不符合论文实际引用顺序的问题

【LaTex】11 ACM参考文献顺序引用 写在最前面解决 ACM-Reference-Format 顺序不符合论文实际引用顺序的问题问题描述问题原因如何解决问题解决方案1&#xff08;更简单&#xff09;解决方案2&#xff08;更自由&#xff09; 小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 …

浙江大学数据结构MOOC-课后习题-第六讲-图2 Saving James Bond - Easy Version

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分享 ①解题思路概览 我的想法是&#xff0c;先建立一个图&#xff0c;然后再利用DFS或者BFS来遍历判断当前顶点能否跳到岸上去 ②怎么建图&#xff1f; 首先要考虑采用什么数据结构来存储图…

uni微信小程序input框过滤中文字节以及规定以外的符号

问题描述 需求是输入账号只能为手机号、邮箱、字母和数字组成的字符串&#xff0c;那么就是所有大小写字母、数字、以及符号 - _ . 四种。 条件限制 微信小程序无法直接通过type属性实现&#xff0c;type属性中没有专门为只允许英文字母的输入类型。详情见input | uni-ap…

LVM与磁盘配额09

一、LVM 1、lvm概述 lvm &#xff08;logical volume manager &#xff09;&#xff1a;逻辑卷管理 linux系统下对硬盘分区的一种管理机制。 场景&#xff1a;lvm机制特别适合于管理大存储设备。 作用&#xff1a;可以动态的对硬盘进行扩容 。 逻辑上的磁盘&#xff0c;概…

uni-app加载本地图片报500(Internal Server Error)异常解决办法

在网上看到关于加载本地图片500错误是因为分包后无法加载分包中的图片&#xff0c;需要在manifest.json中在对应平台的配置下添加"optimization" :{ “subPackages” : true } 这个方法对我遇到的这种错误无效&#xff0c;于是我仔细看了一下所报的异常 上面说在pac…