[图解]企业应用架构模式2024新译本讲解03-事务脚本+表数据入口

news2024/11/16 5:37:30

1
00:00:00,570 --> 00:00:06,290
这里先创建一个service的对象

2
00:00:07,000 --> 00:00:12,470
然后调用对象的方法、操作

3
00:00:12,480 --> 00:00:13,750
就是事务脚本

4
00:00:14,700 --> 00:00:15,900
然后参数是1

5
00:00:16,660 --> 00:00:19,490
也就是合同ID 

6
00:00:19,620 --> 00:00:21,170
我们给它打一个断点

7
00:00:21,180 --> 00:00:24,820
我们在这里,这地方好了

8
00:00:25,740 --> 00:00:31,740
前面都是预热的

9
00:00:39,530 --> 00:00:42,040
往下走

10
00:00:43,760 --> 00:00:45,320
然后这里,在这里

11
00:00:45,330 --> 00:00:49,730
然后你看,这里创建数据入口

12
00:00:51,920 --> 00:00:55,390
然后查询,返回数据表

13
00:00:57,150 --> 00:01:05,040
这个查询就是Gateway的一个操作了

14
00:01:05,540 --> 00:01:10,130
它定义了一些SQL语句

15
00:01:11,320 --> 00:01:13,660
你看,Gateway开始定义了SQL语句

16
00:01:14,530 --> 00:01:15,570
SQL字符串

17
00:01:16,180 --> 00:01:20,120
然后这个符号

18
00:01:20,130 --> 00:01:23,000
就相当于存储过程里面

19
00:01:24,400 --> 00:01:26,170
参数的变量的符号

20
00:01:27,280 --> 00:01:28,470
所以这个地方

21
00:01:29,890 --> 00:01:31,710
应该放在存储过程里面更合适

22
00:01:31,720 --> 00:01:35,010
周围都是C#的语法

23
00:01:35,020 --> 00:01:36,530
这里你看,插一个字符串

24
00:01:37,350 --> 00:01:38,220
还不如怎么样

25
00:01:38,230 --> 00:01:41,710
直接把这个放到数据库那边

26
00:01:42,410 --> 00:01:44,910
作为存储过程,你这里调用

27
00:01:45,390 --> 00:01:49,240
你调用存储过程那个名字就可以了

28
00:01:49,250 --> 00:01:49,720


29
00:01:49,890 --> 00:01:51,200
参数这里就不变了

30
00:01:51,210 --> 00:01:53,200
直接加参数一模一样了

31
00:01:53,820 --> 00:01:54,900
没有必要放在这里

32
00:01:58,870 --> 00:02:01,820
但很多人喜欢在C#、Java里面

33
00:02:01,830 --> 00:02:04,550
写SQL语句

34
00:02:04,560 --> 00:02:06,580
那只能写很简单的

35
00:02:07,750 --> 00:02:09,390
一复杂了你就写不了

36
00:02:09,400 --> 00:02:12,410
实际上,你要彻底的事务脚本的话

37
00:02:12,420 --> 00:02:14,170
应该干脆就什么

38
00:02:14,450 --> 00:02:16,000
直接把所有的运算

39
00:02:16,640 --> 00:02:19,580
都放在存储过程里面来做

40
00:02:20,090 --> 00:02:23,750
如果我们的类的结构做得好

41
00:02:24,640 --> 00:02:27,940
它完全可以通过标准的集合运算

42
00:02:28,530 --> 00:02:30,680
很优雅的把这个结果给拿出来

43
00:02:31,880 --> 00:02:34,290
包括你看这里,if什么之类的

44
00:02:34,780 --> 00:02:36,610
后面在哪里,这里

45
00:02:37,730 --> 00:02:39,270
If

46
00:02:40,080 --> 00:02:41,900
这都是硬编码

47
00:02:41,910 --> 00:02:45,940
if类型等于这个,这种都是硬编码

48
00:02:46,630 --> 00:02:48,640
这种应该变成数据值才对的

49
00:02:49,460 --> 00:02:51,610
不应该放在代码里面硬编码

50
00:02:53,190 --> 00:02:55,430
包括像这种,3,都是硬编码

51
00:02:56,710 --> 00:02:57,890
它不应该出现在这里

52
00:02:58,870 --> 00:03:00,850
代码里面出现的应该是概念

53
00:03:01,780 --> 00:03:03,320
不能出现一个硬编码这样

54
00:03:03,560 --> 00:03:04,930
包括这个

55
00:03:05,340 --> 00:03:06,910
这个也是硬编码

56
00:03:08,660 --> 00:03:12,380
直接就是一个值

57
00:03:13,100 --> 00:03:15,690
当然这个案例本身它是比较简单了

58
00:03:15,700 --> 00:03:20,580
但是我们要知道,这里面是有问题的

59
00:03:21,170 --> 00:03:25,350
先定义了一些SQL字符串

60
00:03:28,160 --> 00:03:32,360
然后这里,前面是连接了,建立连接

61
00:03:32,370 --> 00:03:33,760
然后这里把定义好的

62
00:03:34,370 --> 00:03:35,320
SQL的字符串

63
00:03:35,330 --> 00:03:37,320
赋值给Command对象是吧

64
00:03:37,800 --> 00:03:40,560
然后添加参数,来把这个值传给它

65
00:03:41,460 --> 00:03:47,040
1,把参数传给它

66
00:03:48,050 --> 00:03:51,290
然后执行,返回结果

67
00:03:52,330 --> 00:03:54,390
就是一个数据表

68
00:03:54,400 --> 00:04:00,130
DataTable这样一个对象

69
00:04:00,140 --> 00:04:00,690
一个表

70
00:04:02,490 --> 00:04:12,180
这样来,在哪里

71
00:04:24,250 --> 00:04:25,840
你看,这是一个事务脚本(口误)

72
00:04:26,150 --> 00:04:28,310
这个相当于调用另外一个过程

73
00:04:29,350 --> 00:04:31,860
Gateway,不是事务脚本,这是事务脚本

74
00:04:31,870 --> 00:04:35,690
调用了Gateway的查询的方法

75
00:04:36,070 --> 00:04:41,690
就是我们刚才讲的,Gateway里面,这个地方

76
00:04:45,430 --> 00:04:48,330
Gateway里面它包含了命令

77
00:04:48,460 --> 00:04:50,490
选择、查询、插入、更新等等

78
00:04:53,240 --> 00:04:54,990
你看,这里有一个

79
00:05:02,750 --> 00:05:06,600
Money,这是一个自定义的类

80
00:05:07,750 --> 00:05:08,820
Money定义一个这个

81
00:05:09,110 --> 00:05:14,350
然后你看这里,这个类是按照企业应用架构模式

82
00:05:14,360 --> 00:05:15,710
Money模式实现的类

83
00:05:16,160 --> 00:05:17,390
我们来说一下Money

84
00:05:17,400 --> 00:05:18,150


85
00:05:19,610 --> 00:05:21,200
如果类型是

86
00:05:21,950 --> 00:05:27,070
你看,这里是把值取出来了

87
00:05:27,640 --> 00:05:28,430
值取出来

88
00:05:32,020 --> 00:05:33,240
往下走

89
00:05:33,730 --> 00:05:38,030
这里你看,有一个

90
00:05:38,040 --> 00:05:43,230
你看这里,allocate这个地方

91
00:05:44,430 --> 00:05:49,000
这个地方相当于把钱分为3份

92
00:05:49,970 --> 00:05:51,750
为什么不能够直接除以3

93
00:05:51,760 --> 00:05:53,960
而是要用Money

94
00:05:56,280 --> 00:05:57,950
类的allocate方法

95
00:05:59,520 --> 00:06:01,310
实际上就是货币的问题了

96
00:06:01,870 --> 00:06:03,010
所以我们要说一下

97
00:06:05,520 --> 00:06:07,730
Fowler的书里面也说了这个问题

98
00:06:09,220 --> 00:06:17,060
这个就是刚才那段代码的类图了

99
00:06:19,510 --> 00:06:24,220
我是用UModel把它逆转过来

100
00:06:25,350 --> 00:06:26,740
用UModel这个工具,你用EA也可以的

101
00:06:27,470 --> 00:06:28,190
用EA也可以

102
00:06:28,200 --> 00:06:34,330
我是用UModel来把它逆向工程得到

103
00:06:34,340 --> 00:06:37,540
你看,有几个常数

104
00:06:39,090 --> 00:06:40,900


105
00:06:40,910 --> 00:06:43,580
这里头列出来,然后有几个方法

106
00:06:45,070 --> 00:06:45,820
这是入口的

107
00:06:47,090 --> 00:06:48,170
然后manager有这个

108
00:06:49,690 --> 00:06:51,420
然后service有这两个方法

109
00:06:52,450 --> 00:06:54,420
这是主程序

110
00:06:58,340 --> 00:07:00,170
UModel还有另外一个好处

111
00:07:02,330 --> 00:07:04,800
就是逆向生成序列图

112
00:07:05,870 --> 00:07:08,070
你看这个层次

113
00:07:08,320 --> 00:07:10,270
后面变量什么它都列出来

114
00:07:10,280 --> 00:07:12,770
因为我层次列得比较深

115
00:07:12,780 --> 00:07:14,090
如果列得浅一点

116
00:07:14,100 --> 00:07:15,630
后面这些就可以不用出现

117
00:07:15,640 --> 00:07:16,730
实际上就两个类

118
00:07:17,610 --> 00:07:18,960
一个是

119
00:07:18,970 --> 00:07:19,720
RecognitionService

120
00:07:21,100 --> 00:07:23,270
这是控制类,或者应用服务类

121
00:07:23,280 --> 00:07:26,370
这是入口类

122
00:07:28,270 --> 00:07:31,340
两个,然后你看,创建一个

123
00:07:31,350 --> 00:07:35,870
然后调用,返回

124
00:07:35,880 --> 00:07:39,580
然后,这里有分支

125
00:07:39,750 --> 00:07:44,360
如果类型是这个,走这个

126
00:07:47,760 --> 00:07:48,390
这是

127
00:07:48,670 --> 00:07:53,000
UModel比EA要好的一个地方

128
00:07:53,010 --> 00:07:55,600
可以帮你分析这个程序的结构

129
00:07:58,160 --> 00:08:00,560
当然如果代码已经写得比较清晰了

130
00:08:00,570 --> 00:08:01,880
你直接看代码也看得出来

131
00:08:06,590 --> 00:08:15,160
Money就是金钱类

132
00:08:16,470 --> 00:08:19,500
金钱包括一个是数额,一个是币种

133
00:08:19,920 --> 00:08:21,020
不能说100 

134
00:08:21,230 --> 00:08:22,820
100什么,100块

135
00:08:24,780 --> 00:08:28,800
还是100卢布

136
00:08:28,810 --> 00:08:32,460
100日元

137
00:08:35,390 --> 00:08:36,220
还是100

138
00:08:37,460 --> 00:08:39,650
印度那边,卢比

1
00:00:00,300 --> 00:00:03,590
所以,涉及到币种

2
00:00:04,150 --> 00:00:04,900
这是一个问题

3
00:00:05,830 --> 00:00:07,290
所以币种就有一个什么

4
00:00:07,300 --> 00:00:11,370
必须运算是在同一个币种

5
00:00:11,380 --> 00:00:14,400
你不能说100美元加100日元

6
00:00:16,600 --> 00:00:19,120
如果你要有个兑换的话

7
00:00:19,130 --> 00:00:20,640
你有一个汇率的问题

8
00:00:22,680 --> 00:00:26,430
另外一个问题就是整数的问题了

9
00:00:27,060 --> 00:00:32,670
因为货币本身它有一个最小的单位

10
00:00:33,400 --> 00:00:37,310
我们人民币是分,最小单位

11
00:00:38,540 --> 00:00:39,570
如果说你这个值

12
00:00:39,580 --> 00:00:41,690
比如说,我有7块钱

13
00:00:43,070 --> 00:00:47,130
我分3份,怎么分

14
00:00:47,140 --> 00:00:48,650
你分,如果得到小数点

15
00:00:50,320 --> 00:00:51,100
这是一个什么

16
00:00:52,270 --> 00:00:53,910
无限的小数

17
00:00:54,600 --> 00:00:56,430
如果说你取整取得不好

18
00:00:56,440 --> 00:01:02,040
你分完之后,你把这三个加起来

19
00:01:03,060 --> 00:01:06,250
结果就少了一分或多了一分

20
00:01:06,870 --> 00:01:07,700
这就麻烦了

21
00:01:08,710 --> 00:01:13,200
像我们当时,我第一个项目就碰到这个问题

22
00:01:14,580 --> 00:01:16,060
我们什么都做好了

23
00:01:16,070 --> 00:01:18,550
然后半夜去上线

24
00:01:20,450 --> 00:01:21,950
上线当天晚上就没有睡

25
00:01:22,240 --> 00:01:25,340
98年的时候,当天晚上就没有睡

26
00:01:26,340 --> 00:01:27,920
然后第二天也没有睡

27
00:01:28,850 --> 00:01:31,870
差不多48个小时才睡觉

28
00:01:33,460 --> 00:01:36,050
就是搞这个,其中一个问题就是

29
00:01:37,260 --> 00:01:39,640
头一天多了一分

30
00:01:40,310 --> 00:01:45,640
第二天又多了两分,这样就很麻烦

31
00:01:45,650 --> 00:01:47,790
后来去查文档

32
00:01:48,010 --> 00:01:50,460
我们刚才之前也讲了

33
00:01:54,960 --> 00:01:59,290
没有什么网络,也没人问看,就是翻看文档

34
00:01:59,840 --> 00:02:04,430
包括SQL Server附带的指南

35
00:02:04,820 --> 00:02:08,240
包括VB的手册等等

36
00:02:10,090 --> 00:02:14,980
后来是我们的领导,高级工程师

37
00:02:14,990 --> 00:02:16,060
当时我们是小兵

38
00:02:18,610 --> 00:02:20,810
很不懈努力去找

39
00:02:21,060 --> 00:02:24,910
终于在一个地方找到问题所在

40
00:02:26,440 --> 00:02:29,120
这个还是非常值得学习的

41
00:02:29,130 --> 00:02:31,750
他坚信自己能够解决

42
00:02:33,110 --> 00:02:37,550
他坚信解决问题的地方就在这个书里面

43
00:02:40,230 --> 00:02:44,350
这个的话,我们很多同学做不到的

44
00:02:44,360 --> 00:02:47,990
有的同学他做题做不对

45
00:02:48,000 --> 00:02:50,190
他来问我,老师,题目是不是有问题

46
00:02:52,130 --> 00:02:53,930
你想想就知道了,这个题目

47
00:02:55,130 --> 00:02:57,530
那么多人做,有问题的话

48
00:02:58,620 --> 00:02:59,600
可能早就改了

49
00:02:59,610 --> 00:03:02,710
第二个,我这个题目出题的时候

50
00:03:03,230 --> 00:03:04,570
那个图画得这么精美

51
00:03:04,580 --> 00:03:06,610
我花那么多心思来画这个图

52
00:03:09,560 --> 00:03:10,350
说明什么

53
00:03:10,360 --> 00:03:12,510
既然这个图画得这么精美

54
00:03:13,210 --> 00:03:14,640
我花了心思画这个图

55
00:03:15,220 --> 00:03:18,690
可能我当时考虑是比较周到的

56
00:03:22,380 --> 00:03:26,590
这个周到,就值得你再去认真,再去思考

57
00:03:26,600 --> 00:03:28,310
再去看书,去思考一下

58
00:03:28,320 --> 00:03:30,150
如果说,我这题目出得很潦草

59
00:03:30,700 --> 00:03:31,900
上面都是错别字什么的

60
00:03:32,390 --> 00:03:33,860
你可以怀疑,老师你的题目

61
00:03:34,460 --> 00:03:36,410
是不是出错了

62
00:03:36,930 --> 00:03:38,720
但是,如果说我题目出得很精致

63
00:03:39,600 --> 00:03:41,150
上面的图也很精致

64
00:03:41,160 --> 00:03:42,550
文字也没有什么错误

65
00:03:43,840 --> 00:03:44,740
但你没做对

66
00:03:46,070 --> 00:03:47,460
应该先反省自己

67
00:03:49,190 --> 00:03:50,730
这个是题外话了

68
00:03:50,740 --> 00:03:53,970
我们回想一下我们以前的情况

1
00:00:02,280 --> 00:00:04,680
就是说,你分完之后合起来

2
00:00:05,190 --> 00:00:07,570
这个值依然要相等

3
00:00:11,790 --> 00:00:13,020
这是我们刚才说过的

4
00:00:13,390 --> 00:00:19,070
代码的截图,已经说过了,都不多说了

5
00:00:21,950 --> 00:00:27,470
所以Money类这里,它就解决这个问题

6
00:00:27,720 --> 00:00:30,500
就是说,分完后相加,等于原值

7
00:00:30,740 --> 00:00:32,340
这里书上也说了

8
00:00:32,850 --> 00:00:35,050
这是我们修改过的译文

9
00:00:35,860 --> 00:00:37,680
你想把一笔钱分给多个目标

10
00:00:37,690 --> 00:00:41,990
不想损失零钱,分配或者分割

11
00:00:42,940 --> 00:00:46,390
allocate这里,给出了代码

12
00:00:48,790 --> 00:00:50,380
这个代码本身的话

13
00:00:52,520 --> 00:00:53,360
这里面没有包括

14
00:00:53,370 --> 00:00:58,010
它已经包含在相关的库里面了

15
00:00:58,140 --> 00:01:01,190
这里面就没有,在相关的库里面了

16
00:01:01,200 --> 00:01:04,240
这地方

1
00:00:02,120 --> 00:00:04,880
我们把这个代码运行完毕

2
00:00:06,040 --> 00:00:06,810
刚才到这里

3
00:00:08,070 --> 00:00:09,390
实际上这个地方

4
00:00:09,750 --> 00:00:12,000
这里,控制台还没出来

5
00:00:12,860 --> 00:00:13,810
继续往下走

6
00:00:15,160 --> 00:00:16,740
直接运行好了

7
00:00:19,340 --> 00:00:19,420

8
00:00:20,550 --> 00:00:23,450
你看这里,就出来了

9
00:00:25,130 --> 00:00:27,640
数据库,入账

10
00:00:28,900 --> 00:00:32,070
在这里

11
00:00:34,660 --> 00:00:36,480
然后就直接在这个地方写出来

12
00:00:36,610 --> 00:00:39,470
在这地方写出来

13
00:00:39,720 --> 00:00:43,410
你计算得到那个数值之后

14
00:00:45,000 --> 00:00:46,480
直接在这里输出

15
00:00:47,040 --> 00:00:49,130
一个两个三个,合同1

16
00:00:49,140 --> 00:00:54,120
2,3。合同1是数据库

17
00:00:54,520 --> 00:01:01,540
这样来

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

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

相关文章

618有什么宠物空气净化器推荐?希喂FreAir Lite宠物空气净化器真实体验

一、宠物空气净化器的必要性 掉毛季又来了,猫咪的毛发满天飞,怎么办?我家里的猫咪一到换毛季就掉满地的毛发,尤其喜欢在家里奔跑打闹,结果整个房间都是毛。为了减少家里空气中的浮毛,你都做过哪些努力呢&a…

Shell编程用户注册及登录

需求: 用Shell编程完成用户的注册及登录 完成 注册用户 用户名首字母大写 密码需8个字符及以上且含“$”,“&”,“-”中的任意一个手机号需以139开头的11位号码邮箱需以数字开头的qq.com 2.检测重复注册 3.注册信息写入/etc/secfinfe 4.用户登录 5.检测是否存…

SQLI-labs-第二十七关和第二十七a关

目录 第二十七关 1、判断注入点 2、判断数据库 3、判断表名 第二十七a关 第二十七关 知识点:空格、select、union等过滤绕过 思路: 通过分析源码,我们可以知道对用户的输入进行过滤,对空格、select、union等进行了过滤&…

钡铼PLC集成BL121PO协议网关优化电子制造产线的生产效率

PLC转OPC UA协议转换网关BL121PO在电子制造产线中的优化应用,可以显著提高生产效率,促进生产线的智能化和信息化发展。本文将从以下几个方面进行阐述: 提高设备间通信效率:PLC转OPC UA协议转换网关BL121PO通过高效的协议转换&…

Docker-02-02 Docker离线下载安装与配置(linux)

一、Docker下载 官网下载地址:Index of linux/static/stable/x86_64/ (docker.com) 推荐下载最新的社区版: 二、将安装包上传至服务器并解压 将安装包上传至服务器的/usr/local目录并解压 cd /usr/local lstar -zxvf docker-18.06.3-ce.tgz三、将docker目录下的文件复制到…

ubuntu安全加固

知识背景&#xff1a; 项目背景&#xff1a; 常用命令&#xff1a; useradd: adduser: getent passwd: getent group: id username: adduser newname sudo: sudo userdel <username> sudo rm -rf /home/<username> userdel groupdel 修改shell为/bin…

防止自动化攻击的最佳实践

防止自动化攻击的最佳实践 在当今的网络安全环境中&#xff0c;保护用户账户免受自动化攻击已成为每个网站和应用程序的重要任务。攻击者可以利用多种不同类型的自动化攻击来尝试破坏用户账户。本文将详细介绍常见的攻击类型及其防御机制&#xff0c;帮助您更好地保护用户账户…

基于PHP+MySQL组合开发的720VR全景小程序源码系统 一键生成三维实景 前后端分离带网站的安装代码包以及搭建教程

系统概述 这款源码系统是专门为实现 720VR 全景展示而设计的。它结合了先进的技术和创新的理念&#xff0c;能够将真实场景以全景的形式呈现给用户&#xff0c;让用户仿佛身临其境。该系统采用 PHP 进行后端开发&#xff0c;MySQL 作为数据库管理系统&#xff0c;确保了系统的…

IC618 虚拟机 EDA Calibre2019 Hspice2018 Spectre19.1

虚拟机包含 CentOS 7.9 Cadence IC618 Calibre 2019 Hspice 2018 Spectre19.1 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1aMtPO2G5ad-x5BtIJjCDig?pwdxcii 提取码&#xff1a;xcii

K8s证书过期处理

问题描述 本地有一个1master2worker的k8s集群&#xff0c;今天启动VMware虚拟机之后发现api-server没有起来&#xff0c;docker一直退出&#xff0c;这个集群是使用kubeadm安装的。 于是kubectl logs查看了日志&#xff0c;发现证书过期了 解决方案&#xff1a; 查看证书 #…

希尔排序法

希尔排序为插入排序的优化&#xff0c;即将数组分组&#xff0c;将每一组进行插入排序&#xff0c;每一组排成有序后&#xff0c;最后整体就变有序了。 上面gap2&#xff0c;即5&#xff0c;14&#xff0c;18&#xff0c;27&#xff0c;68为一组&#xff1b;13&#xff0c;20&a…

FaceChain-FACT:开源10秒写真生成,复用海量LoRa风格,基模友好型写真应用

github开源地址&#xff1a;https://github.com/modelscope/facechain/tree/main/facechain_adapter 魔搭创空间应用体验&#xff1a;魔搭社区 一、效果演示 FaceChain FACT的代码和模型目前已经在github和modelscope创空间上同步开源。FaceChain FACT具有简单的交互式界面设…

Linux网络编程:应用层协议|HTTP

前言&#xff1a; 我们知道OSI模型上层分为应用层、会话层和表示层&#xff0c;我们接下来要讲的是主流的应用层协议HTTP&#xff0c;为什么需要这个协议呢&#xff0c;因为在应用层由于操作系统的不同、开发人员使用的语言类型不同&#xff0c;当我们在传输结构化数据时&…

Oracle dblink 发现Network 等待事件的分析 enq: KO - fast object checkpoint

所有的sql 通过dblink 查询全部等待中&#xff0c; 同一个SQL 20多个session 在跑&#xff0c;等待事件network&#xff0c;可能怀疑是不是网络断开了&#xff0c;导致没有返回 执行sql 如下&#xff1a; BEGIN Xdblink ; END; 去到dblink 所在的db&#xff0c;发现20多个sql在…

Unity SetParent第二个参数worldPositionStays的意义

初学Unity的小知识&#xff1a; 改变对象的父级有三种调用方式&#xff0c;如下&#xff1a; transMe.SetParent(transParent,true); transMe.SetParent(transParent,false); transMe.parent transParent;具体有什么区别呢&#xff0c;这里写一个测试例子来详细说明&#xff…

ROS2 Topics和Services

本文主要介绍ROS的Topics概念&#xff0c;如何创建Publisher和Subscriber&#xff0c;通过Topic在ROS程序间通信&#xff1b;介绍ROS的Services概念&#xff0c;如何创建Client和Server并建立通信。 更多内容&#xff0c;访问专栏目录获取实时更新。 ROS Topics Topics可以被视…

SQL数据库多层嵌套 json转sql建表语句,SQL数据库里数组里对象数据怎么创建

1. uniapp sqlite 一个数组包含对象嵌套对象通过主外键方式插入数据库&#xff1a; // 假设有一个对象数组&#xff0c;对象中包含嵌套对象 const objectsArray [{parentObject: {id: 1,name: Parent 1,// 其他父对象属性},childObject: {id: 11,parentId: 1,name: Child 1 o…

TOPSIS综合评价

TOPSIS法&#xff08;Technique for Order Preference by Similarity to an Ideal Solution&#xff09;是一种常用的综合评价方法&#xff0c;该方法根据有限个评价对象与理想化目标的接近程度进行排序&#xff0c;是在现有的对象中进行相对优劣的评价。 TOPSIS法的原理是通过…

Github 2024-05-29 C开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-29统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10C++项目3PHP项目1PHP:流行的Web开发脚本语言 创建周期:4710 天开发语言:C, PHP协议类型:OtherStar数量:37340 个Fork数量:7657 次…

SpringBoot 微服务中怎么获取用户信息 token

SpringBoot 微服务中怎么获取用户信息 token 当我们写了一个A接口&#xff0c;这个接口需要调用B接口&#xff0c;但是B接口需要包含请求头内容&#xff0c;比如需要用户信息、用户id等内容&#xff0c;由于不在同一个线程中&#xff0c;使用ThreadLocal去获取数据是无法获取的…