[图解]企业应用架构模式2024新译本讲解26-层超类型2

1
00:00:00,510 --> 00:00:03,030
这个时候,如果再次查找所有人员

2
00:00:03,040 --> 00:00:03,750
我们会发现

3
00:00:05,010 --> 00:00:06,370
这一次所有的对象

4
00:00:06,740 --> 00:00:08,690
都是来自标识映射的

5
00:00:10,540 --> 00:00:13,390
就不需要再把数据库里面的

6
00:00:13,770 --> 00:00:16,610
加载到标识映射

7
00:00:16,620 --> 00:00:17,890
因为所有的都在里面

8
00:00:19,250 --> 00:00:20,120
我们来看一下

9
00:00:22,200 --> 00:00:23,320
这个是一样的

10
00:00:25,220 --> 00:00:32,040
这个地方跟之前一样

11
00:00:34,270 --> 00:00:36,830
但是这里面还是要查询一下

12
00:00:38,200 --> 00:00:39,990
案例就这样写的,没办法

13
00:00:54,060 --> 00:00:55,870
在这里,这个地方

14
00:00:56,680 --> 00:01:02,140
这时候,根据ID来判断这个的时候

15
00:01:04,430 --> 00:01:05,100
都在里面

16
00:01:05,350 --> 00:01:11,300
也就是说所有的都是走这里的

17
00:01:11,310 --> 00:01:12,580
下面这个就不用了

18
00:01:13,540 --> 00:01:16,510
到这里都是走这个地方

19
00:01:18,060 --> 00:01:19,130
直接返回了

20
00:01:20,630 --> 00:01:21,740
每一个都是这样

21
00:01:22,890 --> 00:01:25,970
你看,这里也是,都是直接走这里

22
00:01:26,680 --> 00:01:27,630
直接返回

23
00:01:34,220 --> 00:01:36,260
一共几条

24
00:01:36,350 --> 00:01:37,260
4条

25
00:01:38,340 --> 00:01:42,780
每一条,1234,你看都是直接返回

26
00:01:52,850 --> 00:01:53,640
下面是一样的

27
00:01:53,730 --> 00:01:55,680
把它输出出来,一样的

1
00:00:00,750 --> 00:00:08,900
接下来,我们再来看更新,我们一步步往下走

2
00:00:09,400 --> 00:00:13,040
比如说,更新ID为1人员的属性值

3
00:00:13,640 --> 00:00:15,800
首先通过mapper

4
00:00:17,450 --> 00:00:21,570
调用find操作

5
00:00:21,860 --> 00:00:23,170
把1找出来

6
00:00:24,060 --> 00:00:26,050
我们看find操作

7
00:00:31,500 --> 00:00:32,460
这个操作

8
00:00:33,980 --> 00:00:37,800
它实际上是实现了

9
00:00:37,810 --> 00:00:39,200
PersonFinder接口

10
00:00:41,970 --> 00:00:45,800
里面定义的find方法

11
00:00:47,180 --> 00:00:47,690


12
00:00:51,560 --> 00:00:52,680
然后在这里面

13
00:00:52,970 --> 00:01:00,050
它又调用了超类定义的

14
00:01:00,770 --> 00:01:04,250
AbstractFind方法

15
00:01:05,650 --> 00:01:08,200
因为这里面,对查找来说

16
00:01:08,210 --> 00:01:11,120
对所有的根据ID查找

17
00:01:11,130 --> 00:01:13,960
对所有的领域对象一样

18
00:01:13,970 --> 00:01:16,800
你不管是Person也好

19
00:01:16,810 --> 00:01:17,880
Order也好

20
00:01:17,890 --> 00:01:20,760
都是ID,回来一个对象

21
00:01:23,190 --> 00:01:24,370
没有什么区别

22
00:01:25,860 --> 00:01:28,520
所以这个地方

23
00:01:29,310 --> 00:01:30,390
它直接调用

24
00:01:32,580 --> 00:01:33,180
抽象类

25
00:01:34,030 --> 00:01:35,540
就是层超类型的

26
00:01:35,550 --> 00:01:39,100
顶上的超类就可以了

27
00:01:39,670 --> 00:01:42,740
然后把它变成Person返回

28
00:01:43,250 --> 00:01:45,920
我们来看AbstractFind

29
00:01:48,710 --> 00:01:49,960
这是在这里定义的

30
00:01:52,610 --> 00:01:55,410
在抽象的映射器里面定义的

31
00:01:58,190 --> 00:02:01,110
ID进来,返回的是一个领域对象

32
00:02:01,950 --> 00:02:02,540
DomainObject

33
00:02:02,990 --> 00:02:06,390
也就是Person上面的超类

34
00:02:06,480 --> 00:02:07,870
最顶上超类

35
00:02:09,600 --> 00:02:10,430
我们看第一个

36
00:02:10,440 --> 00:02:14,180
直接调用了

37
00:02:14,190 --> 00:02:16,860
loadedmap的操作

38
00:02:17,070 --> 00:02:18,820
TryGetValue操作

39
00:02:20,110 --> 00:02:21,710
这个操作就一步到位

40
00:02:21,840 --> 00:02:22,790
给你个ID

41
00:02:23,790 --> 00:02:27,750
然后有就直接把它输出到DomainObject

42
00:02:30,740 --> 00:02:34,020
这里的输出参数这里来了

43
00:02:37,260 --> 00:02:38,730
显然我们这是有的

44
00:02:39,130 --> 00:02:44,420
我们有的,因为前面我们经过了加载

45
00:02:44,430 --> 00:02:45,340
插入

46
00:02:45,350 --> 00:02:46,380
肯定是有的了

47
00:02:47,040 --> 00:02:49,080
肯定能找到,如果找到,就返回

48
00:02:49,090 --> 00:02:52,110
肯定能找到,能找到

49
00:02:53,320 --> 00:02:54,000
返回

50
00:02:55,020 --> 00:02:56,140
如果找不到

51
00:02:56,150 --> 00:02:58,860
再从数据库加载,跟前面一样

52
00:03:00,000 --> 00:03:03,600
下面这个没有走了,像前面一样

53
00:03:07,240 --> 00:03:15,260
好,找到了,得到人员的对象

54
00:03:15,990 --> 00:03:19,380
得到了,然后就修改属性值

55
00:03:21,010 --> 00:03:22,720
名,赋值为Jack

56
00:03:23,650 --> 00:03:25,120
然后通过mapper的

57
00:03:26,740 --> 00:03:31,340
update操作更新

58
00:03:34,300 --> 00:03:34,700
对象

59
00:03:34,950 --> 00:03:39,900
把这个对象的属性值更新到数据库里面去

60
00:03:40,360 --> 00:03:44,510
这里调用了这个,这个update

61
00:03:44,520 --> 00:03:48,920
跟前面的入口是一样的

62
00:03:49,170 --> 00:03:51,440
因为这里面没有做抽象

63
00:03:51,450 --> 00:03:57,040
你看,我们前面查找和插入

64
00:03:57,630 --> 00:03:59,050
这两个都

65
00:03:59,060 --> 00:04:02,760
要么是在这里定义了查找

66
00:04:02,770 --> 00:04:12,220
要么是在这里定义了插入

67
00:04:15,110 --> 00:04:16,130
包括插入

68
00:04:17,230 --> 00:04:19,510
加载都被抽象出来了

69
00:04:19,830 --> 00:04:21,730
但是在这个示例里面

70
00:04:22,880 --> 00:04:24,740
包括书里面它也没有

71
00:04:25,230 --> 00:04:27,720
因为这个示例就复刻书上

72
00:04:28,030 --> 00:04:29,220
代码片段

73
00:04:29,790 --> 00:04:31,200
它也没有把这个提炼出来

74
00:04:31,290 --> 00:04:32,440
可能是要对比一下

75
00:04:32,450 --> 00:04:34,200
实际上要提炼也是可以提炼的

76
00:04:35,790 --> 00:04:39,360
因为你插入更新,一回事

77
00:04:40,330 --> 00:04:45,570
无非是构造一个,跟insert一样

78
00:04:45,700 --> 00:04:50,160
通过这个方法来构造SQL语句

79
00:04:50,170 --> 00:04:52,640
还有参数的集合

80
00:04:55,140 --> 00:04:56,650
这里是用硬编码的形式

81
00:04:57,590 --> 00:05:00,850
创建连接,打开连接,一样的

82
00:05:00,860 --> 00:05:07,240
然后,你看这个一个常量

83
00:05:07,760 --> 00:05:10,320
这里直接就用硬编码了

84
00:05:11,620 --> 00:05:14,810
然后一个一个添加参数一样的

85
00:05:15,350 --> 00:05:20,810
然后执行,我们就跳过去了

86
00:05:26,200 --> 00:05:33,560
这是更新人员的名

87
00:05:34,800 --> 00:05:36,630
这个更新还是比较简单的

88
00:05:38,560 --> 00:05:40,070
该有的知识点我们前面

89
00:05:40,080 --> 00:05:42,070
也都大多说过了

90
00:05:42,320 --> 00:05:43,470
所以比较简单

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

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

相关文章

2024辽宁省数学建模C题【改性生物碳对水中洛克沙胂和砷离子的吸附】原创论文分享

大家好呀,从发布赛题一直到现在,总算完成了2024 年辽宁省大学数学建模竞赛C题改性生物碳对水中洛克沙胂和砷离子的吸附完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃…

【JavaScript】解决 JavaScript 语言报错:Uncaught SyntaxError: Unexpected identifier

文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 缺少必要的标点符号2. 使用了不正确的标识符3. 关键词拼写错误4. 变量名与保留字冲突 四、解决方案与预防措施1. 检查和添加必要的标点符号2. 使用正确的标识符3. 检查关键词拼写4. 避免使用保留字作为变量名…

全栈 Discord 克隆:Next.js 13、React、Socket.io、Prisma、Tailwind、MySQL笔记(一)

前言 阅读本文你需要有 Next.js 基础 React 基础 Prisma 基础 tailwind 基础 MySql基础 准备工作 打开网站 https://ui.shadcn.com/docs 这不是一个组件库。它是可重用组件的集合,您可以将其复制并粘贴到应用中。 打开installation 选择Next.js 也就是此页面…

智慧校园服务监控功能

智慧校园系统中的服务监控功能,扮演着维护整个校园数字化生态系统稳定与高效运作的重要角色。它如同一位全天候的守护者,通过实时跟踪、分析并响应系统各层面的运行状况,确保教学、管理等核心业务流程的顺畅进行。 服务监控功能覆盖了智慧校园…

开发个人Ollama-Chat--6 OpenUI

开发个人Ollama-Chat–6 OpenUI Open-webui Open WebUI 是一种可扩展、功能丰富且用户友好的自托管 WebUI,旨在完全离线运行。它支持各种 LLM 运行器,包括 Ollama 和 OpenAI 兼容的 API。 功能 由于总所周知的原由,OpenAI 的接口需要密钥才…

知识图谱与 LLM:微调与检索增强生成

Midjourney 的知识图谱聊天机器人的想法。 大型语言模型 (LLM) 的第一波炒作来自 ChatGPT 和类似的基于网络的聊天机器人,这些模型在理解和生成文本方面非常出色,这让人们(包括我自己)感到震惊。 我们中的许多人登录并测试了它写…

微信视频号的视频怎么下载到本地?快速教你下载视频号视频

天来说说市面上常见的微信视频号视频下载工具,教大家快速下载视频号视频! 方法一:缓存方法 该方法来源早期视频技术,因早期无法将大量视频通过网络存储,故而会有缓存视频文件到手机,其目的为了提高用户体验…

尚硅谷Vue3入门到实战,最新版vue3+TypeScript前端开发教程

Vue3 编码规范 创建vue3工程 基于vite创建 快速上手 | Vue.js (vuejs.org) npm create vuelatest 在nodejs环境下运行进行创建 按提示进行创建 用vscode打开项目 安装依赖 源文件有src 内有main.ts App.vue 简单分析 编写src vue2语法在三中适用 vue2中的date metho…

【深度学习入门篇 ⑤ 】PyTorch网络模型创建

【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

OSPF.综合实验

1、首先将各个网段基于172.16.0.0 16 进行划分 1.1、划分为4个大区域 172.16.0.0 18 172.16.64.0 18 172.16.128.0 18 172.16.192.0 18 四个网段 划分R4 划分area2 划分area3 划分area1 2、进行IP配置 如图使用配置指令进行配置 ip address x.x.x.x /x 并且将缺省路由…

Sortable.js板块拖拽示例

图例 代码在图片后面 点赞❤️关注&#x1f64f;收藏⭐️ 页面加载后显示 拖拽效果 源代码 由于js库使用外链&#xff0c;所以会加载一会儿 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name&qu…

C语言 ——— 实用调试技巧(Visual Studio)

目录 Debug 和 Release 的区别 F10 --- 逐过程调试 & F11 --- 逐语句调试 F9 --- 新建/切换断点 & F5 --- 开始调试 shift F5 & ctrl F5 Debug 和 Release 的区别 Debug&#xff1a;通常为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化…

一 GD32 MCU 开发环境搭建

GD32 系列为通用型 MCU &#xff0c;所以开发环境也可以使用通用型的 IDE &#xff0c;目前使用较多的是 KEIL、 IAR 、 GCC 和 Embedded Builder &#xff0c;客户可以根据个人喜好来选择相应的开发环境。 目录 1、使用 Keil 开发 GD32 目前市面通用的MDK for ARM版本有Kei…

企业网三层架构

企业网三层架构&#xff1a;是一种层次化模型设计&#xff0c;旨在将复杂的网络设计分成三个层次&#xff0c;每个层次都着重于某些特定的功能&#xff0c;以提高效率和稳定性。 企业网三层架构层次&#xff1a; 接入层&#xff1a;使终端设备接入到网络中来&#xff0c;提供…

Android12 MultiMedia框架之GenericSource extractor

前面两节学习到了各种Source的创建和extractor service的启动&#xff0c;本节将以本地播放为例记录下GenericSource是如何创建一个extractor的。extractor是在PrepareAsync()方法中被创建出来的&#xff0c;为了不过多赘述&#xff0c;我们直接从GenericSource的onPrepareAsyn…

13_Shell系统函数

13_Shell系统函数和自定义函数 一、系统函数 basename 获取文件名 #!/bin/bash#basename 相对路径文件名 basename ./1.sh#basename 绝对路径文件名 basename /tmp/1.sh#basename 去除文件后缀名 basename /tmp/1.sh .shdirname 获取文件所在目录名 #!/bin/bash#dirname 相对路…

Redis持久化RDB,AOF

目 录 CONFIG动态修改配置 慢查询 持久化 在上一篇主要对redis的了解入门&#xff0c;安装&#xff0c;以及基础配置&#xff0c;多实例的实现&#xff1a;redis的安装看我上一篇&#xff1a; Redis安装部署与使用,多实例 redis是挡在MySQL前面的&#xff0c;运行在内存…

产品经理-研发流程-敏捷开发-迭代-需求评审及产品规划(15)

敏捷开发是以用户的需求进化为核心&#xff0c;采用迭代、循序渐进的方法进行软件开发。 通俗来说&#xff0c;敏捷开发是一个软件开发流程&#xff0c;是一个采用了迭代方法的开发流程 简单来说&#xff0c;迭代就是把一个大产品拆分出一些最小的实现单位。完成不同的迭代就最…

机器学习筑基篇,Jupyter Notebook 精简指南

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x00 Jupyter Notebook 简明指南 描述&#xff1a;前面我们已经在机器学习工作站&#xff08;Ubuntu 24.04 Desktop Geforce RTX 4070Ti SUPER&#xff09;中安装 Anaconda 工具包&#xff0c;其…

老物件线上3D回忆展拓宽了艺术作品的展示空间和时间-深圳华锐视点

在数字技术的浪潮下&#xff0c;3D线上画展为艺术家们开启了一个全新的展示与销售平台。这一创新形式不仅拓宽了艺术作品的展示空间&#xff0c;还为广大观众带来了前所未有的观赏体验。 3D线上画展制作以其独特的互动性&#xff0c;让艺术不再是单一的视觉享受。在这里&#x…