[图解]企业应用架构模式2024新译本讲解20-数据映射器2

1
00:00:01,860 --> 00:00:06,180
那么这个数据映射器因为它有这样的特点

2
00:00:07,310 --> 00:00:12,630
你想想,它负责同步这两边

3
00:00:13,010 --> 00:00:14,930
对象、数据库是独立的

4
00:00:15,990 --> 00:00:18,690
然后

5
00:00:18,700 --> 00:00:20,610
数据库里面的数据拿出来

6
00:00:20,620 --> 00:00:22,360
变成内存里面的

7
00:00:22,370 --> 00:00:25,360
一个对象的映像

8
00:00:26,410 --> 00:00:28,650
然后内存里对象被修改了

9
00:00:28,940 --> 00:00:30,910
或者新增一条或者删除一个

10
00:00:31,540 --> 00:00:35,300
那么这种变化要同步到数据库里面去

11
00:00:36,860 --> 00:00:38,850
现在领域层你也不管

12
00:00:38,860 --> 00:00:40,780
数据库这边也不管

13
00:00:40,790 --> 00:00:42,530
所有的压力

14
00:00:42,540 --> 00:00:43,690
都是由这个框架

15
00:00:44,570 --> 00:00:47,450
由映射器本身来管的

16
00:00:49,640 --> 00:00:53,950
显然映射器肯定要比较复杂的

17
00:00:54,160 --> 00:00:56,930
因为所有的压力都在它那边

18
00:01:01,260 --> 00:01:02,330
既然复杂

19
00:01:02,340 --> 00:01:07,010
而且我们前面讲,它是可以独立的

20
00:01:07,260 --> 00:01:08,290
相对比较独立的

21
00:01:08,300 --> 00:01:09,530
可以随便更换的

22
00:01:12,520 --> 00:01:15,720
还有领域层根本就不知道它的存在

23
00:01:15,730 --> 00:01:16,000


24
00:01:16,010 --> 00:01:17,320
不需要知道它的存在

25
00:01:19,020 --> 00:01:21,050
显然用现成的这种

26
00:01:21,350 --> 00:01:24,390
已有的比较成熟的产品

27
00:01:24,520 --> 00:01:25,790
是更合适的

28
00:01:26,860 --> 00:01:28,010
不用自己来做

29
00:01:30,530 --> 00:01:31,560
比较有名的

30
00:01:31,570 --> 00:01:33,360
基于这种映射器的

31
00:01:33,690 --> 00:01:36,410
数据映射器的模式的产品

32
00:01:36,420 --> 00:01:38,130
比如说Hibernate

33
00:01:38,550 --> 00:01:41,150
还有MyBatis

34
00:01:42,900 --> 00:01:44,210
还有Entity Framework

35
00:01:44,340 --> 00:01:47,480
就是那个.net下面的

36
00:01:49,240 --> 00:01:50,960
当然还有更多

37
00:01:51,410 --> 00:01:55,550
但是我对这方面并不是很了解

38
00:01:55,880 --> 00:02:00,840
到底哪个在别的平台上更流行

39
00:02:01,010 --> 00:02:03,250
我用的最多的就是Entity Framework

40
00:02:03,260 --> 00:02:05,170
之前也用过NHibernate

41
00:02:07,450 --> 00:02:09,560
就是Hibernate的.net版本

42
00:02:12,690 --> 00:02:15,330
当然这个MyBatis好像也是有.net的

43
00:02:15,340 --> 00:02:17,570
但是没有用过

44
00:02:27,070 --> 00:02:27,900


45
00:02:29,670 --> 00:02:32,950
那么映射器这个模式

46
00:02:33,160 --> 00:02:34,430
数据映射器这个模式

47
00:02:34,440 --> 00:02:36,990
它是比较复杂的一个模式

48
00:02:40,060 --> 00:02:43,060
一会我们在演示案例代码的时候

49
00:02:44,340 --> 00:02:45,500
我们会发现它里面

50
00:02:45,510 --> 00:02:48,920
涉及到了很多相关的模式

51
00:02:50,300 --> 00:02:53,190
因为它要实现这样一个映射器

52
00:02:53,200 --> 00:02:54,950
也就是两边同步

53
00:02:54,960 --> 00:02:58,430
它就要考虑很多问题

54
00:02:59,200 --> 00:03:00,510
考虑的这些问题

55
00:03:01,300 --> 00:03:04,000
在书里面它就归纳成了一些模式

56
00:03:06,730 --> 00:03:10,090
包括但不限于,层超类型

57
00:03:10,450 --> 00:03:12,500
标识映射,分离接口、工作单元

58
00:03:12,510 --> 00:03:15,240
元数据映射、延迟加载等等

59
00:03:16,220 --> 00:03:20,370
一会我们在演示和解析案例代码的时候

60
00:03:21,060 --> 00:03:24,960
我们碰到相应的模式在应用的时候

61
00:03:25,460 --> 00:03:30,020
我们就会转到,顺便讲解一下这个模式

62
00:03:31,150 --> 00:03:32,630
当然,我也不会都讲解

63
00:03:32,640 --> 00:03:35,310
因为它涉及到很多的模式

64
00:03:35,840 --> 00:03:38,280
我们说代码里面碰到的,值得一讲的

65
00:03:38,450 --> 00:03:39,960
就会专门来讲

66
00:03:41,360 --> 00:03:43,990
也是书里面的,另外章节的模式了

67
00:03:47,570 --> 00:03:49,850
那么有一些可能代码没涉及

68
00:03:49,860 --> 00:03:53,120
或者觉得限于篇幅的考虑

69
00:03:53,130 --> 00:03:55,280
没有必要讲的,我们就跳过去

70
00:04:01,650 --> 00:04:03,430
接下来,我们来看案例

71
00:04:04,940 --> 00:04:07,980
案例还是跟前面的活动记录

72
00:04:08,290 --> 00:04:12,050
还有入口,行数据入口一样的

73
00:04:12,060 --> 00:04:15,790
都是一个人员的表而已

74
00:04:21,300 --> 00:04:25,030
这个案例项目也是用C#写的

75
00:04:25,040 --> 00:04:27,910
来源跟之前的来源是一样的

76
00:04:29,500 --> 00:04:32,380
就是书上的代码片段

77
00:04:33,030 --> 00:04:35,440
复刻出来的一个案例

78
00:04:38,630 --> 00:04:40,920
和之前的活动记录

79
00:04:40,930 --> 00:04:45,750
还有入口不一样的是,这里分了几个包

80
00:04:46,910 --> 00:04:49,070
分了几个包,有领域包

81
00:04:49,080 --> 00:04:50,150
映射器包

82
00:04:50,160 --> 00:04:51,230
数据库包

83
00:04:53,270 --> 00:04:55,100
不像以前一样都放一个包里面

84
00:04:55,110 --> 00:04:59,150
因为它要涉及到分离接口

85
00:05:00,470 --> 00:05:01,680
映射器本身

86
00:05:01,690 --> 00:05:05,590
还要有一个单独独立的包等等

87
00:05:06,190 --> 00:05:10,220
所以这里面就会分几个包

88
00:05:10,470 --> 00:05:17,060
我们这个类已经比较多了

89
00:05:17,270 --> 00:05:18,780
把它分到几个包里面去

90
00:05:22,370 --> 00:05:27,390
总的类有这么一些

91
00:05:27,770 --> 00:05:30,080
我们来看,你看,这个图

92
00:05:30,090 --> 00:05:33,150
应该还可以看得清楚

93
00:05:35,990 --> 00:05:37,680
这是映射器,具体映射器

94
00:05:37,770 --> 00:05:39,280
这有个抽象的映射器

95
00:05:42,750 --> 00:05:48,510
然后这里还实现了一个接口,查找器的接口

96
00:05:51,670 --> 00:05:55,600
也就是说

97
00:05:55,610 --> 00:05:58,920
它单独把查找的这些方法

98
00:05:58,930 --> 00:06:01,940
把它分离到这样一个

99
00:06:01,950 --> 00:06:05,290
查找器的里面去

100
00:06:05,460 --> 00:06:06,890
作为一个接口在这里

101
00:06:10,740 --> 00:06:13,970
这是我们一会会讲到的分离接口

102
00:06:21,200 --> 00:06:25,270
你看,这里,这是Person领域对象

103
00:06:25,280 --> 00:06:27,230
这是PersonMapper

104
00:06:27,860 --> 00:06:32,170
这是映射器,就是Person的实体类

105
00:06:33,180 --> 00:06:37,150
你看,它们都有一个共同的超类

106
00:06:37,810 --> 00:06:39,520
因为我们这里只有一个类

107
00:06:39,650 --> 00:06:41,200
但是如果说我们这里有很多

108
00:06:41,210 --> 00:06:42,080
有Person

109
00:06:42,740 --> 00:06:43,290
有Customer

110
00:06:44,300 --> 00:06:46,250
Order什么之类的

111
00:06:46,740 --> 00:06:48,950
这里同样也有一批

112
00:06:49,870 --> 00:06:52,380
那么这些共同的领域类也好

113
00:06:52,390 --> 00:06:54,780
它会有一个共同的超类

114
00:06:57,430 --> 00:06:58,340
超类的目的

115
00:06:59,880 --> 00:07:01,840
主要是维护一些共同的东西了

116
00:07:02,430 --> 00:07:04,860
这个就是我们一会要提到的

117
00:07:06,820 --> 00:07:08,380
Fowler把它归纳

118
00:07:08,390 --> 00:07:11,910
叫做层超类型这样一个模式

119
00:07:18,470 --> 00:07:19,540
这是它的类

120
00:07:21,070 --> 00:07:24,670
你看,Person这个类已经很简单

121
00:07:24,680 --> 00:07:24,950


122
00:07:24,960 --> 00:07:28,740
里面全部都是只有领域的操作

123
00:07:29,110 --> 00:07:31,620
因为数据的操作已经到这里来了

124
00:07:31,830 --> 00:07:32,980
到这里面来了

125
00:07:34,200 --> 00:07:35,660
查找更新什么的

126
00:07:37,940 --> 00:07:38,860
到这里来了

127
00:07:39,480 --> 00:07:44,690
而且有一些是在抽象类里面

128
00:07:48,410 --> 00:07:49,990
先在抽象类里面

129
00:07:50,000 --> 00:07:51,230
定义抽象的方法

130
00:07:51,240 --> 00:07:55,160
然后下面来实现,下面来覆盖实现

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

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

相关文章

掌握MySQL基础命令:数据表结构修改详细操作

MySQL数据表(Table)是MySQL数据库中存储数据的基本结构单元。简单来说,数据表可以被看作是一个二维的、由行(Row)和列(Column)组成的表格,其中每一行代表了一个记录(Reco…

Docker(二):Docker image Docker Container

本文将介绍 Docker 映像和容器以及 docker 文件之间的差异与联系,本文还将解释如何以及何时使用它们。 什么是 Dockerfile? 它是一个简单的文本文件,包含命令或过程的集合。我们运行的这些命令和准则作用于配置为创建新的 Docker 镜像的基本…

《长江信息通信》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《长江信息通信》是不是核心期刊? 答:不是,是知网收录的第一批认定学术期刊。 问:《长江信息通信》级别? 答:省级。主管单位:湖北省通信管理局 主办单位&#xff…

Vue实现金钱输入框组件自动带千位逗号

新建PriceInput.vue <template><div id"bord"><el-inputv-model"inputValue"v-bind"$attrs":maxlength"maxlength"input"handleInput"focus"handleFocus"blur"handleBlur"change"h…

ABAQUS山东济南青岛正版代理商亿达四方:构筑仿真技术新高地

在历史悠久而又充满活力的齐鲁大地上&#xff0c;济南与青岛作为山东省的两大核心城市&#xff0c;正引领着区域经济的蓬勃发展与科技创新。亿达四方&#xff0c;作为ABAQUS在山东济南与青岛的官方正版代理商&#xff0c;正以先进的仿真技术为基石&#xff0c;助力两地企业加速…

【GD32F303红枫派使用手册】第二十九节 USB-IAP升级实验

29.1 实验内容 通过本实验主要学习以下内容&#xff1a; USB IAP升级操作 29.2 实验原理 USB IAP升级本例程中使用的是Custom HID中的IAP设备类&#xff0c;其设备类协议的实现与HID的类似&#xff0c;主要包括GET_REPORT/GET_IDLE/GET_PROTOCOL/SET_REPORT/SET_IDLE/SET_P…

【Qt知识】qrc机制

在Qt中&#xff0c;qrc机制是一种资源管理系统&#xff0c;它允许你将应用程序所需的静态资源&#xff0c;如图像、样式表、字体和音频文件&#xff0c;嵌入到可执行文件中而不是作为外部文件存在。这样做的好处是资源管理更加安全&#xff0c;因为它们不会丢失或被意外修改&am…

git基本使用(一):git的基本概念

Git 是一种分布式版本控制系统&#xff0c;最初由 Linus Torvalds 于 2005 年为 Linux 内核开发。它主要用于跟踪文件的更改&#xff0c;特别是在软件开发过程中&#xff0c;可以帮助团队成员协同工作。它在实际项目开发中&#xff0c;应用非常广泛&#xff0c;我们这一节来掌握…

qt 滚动区域简单实验

1.概要 有些时候&#xff0c;想用一个有限的区域显示更多的内容&#xff0c;且内容不固定用滚动区域控件是一个不错的选择&#xff0c;我今天就用一个图片简单的实验一下。 2.代码&#xff08;关键代码&#xff09; #include "widget.h" #include "ui_widget…

flutter开发实战-Webview及dispose关闭背景音

flutter开发实战-Webview及dispose关闭背景音 当在使用webview的时候&#xff0c;dispose需要关闭网页的背景音或者音效。 一、webview的使用 在工程的pubspec.yaml中引入插件 webview_flutter: ^4.4.2webview_cookie_manager: ^2.0.6Webview的使用代码如下 初始化WebView…

uni-app上传失败超出文件限制解决方法-分包处理-预加载

分包背景 当你的上传出现一下错误&#xff1a; Error: 系统错误&#xff0c;错误码&#xff1a;80051,source size 2089KB exceed max limit 2MB [20240703 10:53:06][wxbf93dfb6cb3eb8af] [1.06.2405010][win32-x64] 说明你主包太大需要处理了&#xff0c;一下两种方法可以…

Day03-Jenkins与集成案例

Day03-Jenkins与集成案例 6. CD持续交付&#xff0c;持续部署实现方案7. 案例04: basketball案例,搭建开发测试专用的任务7.1 任务要求7.2 步骤7.3 详细步骤1&#xff09;安装插件2&#xff09;创建任务 7.4 gitlab配置钩子1) 解除钩子局域网访问限制2) gitlab配置钩子 7.5 与部…

网络基础:OSPF 协议

OSPF&#xff08;Open Shortest Path First&#xff09;是一种广泛使用的链路状态路由协议&#xff0c;用于IP网络中的内部网关协议&#xff08;IGP&#xff09;。OSPF通过在网络中的所有路由器之间交换路由信息&#xff0c;选择从源到目的地的最优路径。OSPF工作在OSI模型的第…

Nginx系列(二)---Mac上的快速使用

一、安装 前置软件&#xff1a;Homebrew 安装方法&#xff1a;终端输入/bin/bash -c "$(curl -fsSL <https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh>)"更新&#xff1a; brew update 设置中科大镜像源&#xff1a;git -C "$(brew --r…

昇思25天学习打卡营第10天 | 自然语言处理:RNN实现情感分类

1. RNN实现情感分类 1.2 概述 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative(负面) 预测标签: Negative输…

初识Spark

一、简介 官网&#xff1a;Apache Spark™ - Unified Engine for large-scale data analytics Apache的顶级项目&#xff0c;用于大规模数据处理的统一分析引擎。 支持语言&#xff1a;Java、Scala、Python和R (源码为Scala) 高级工具&#xff1a; 1、SparkSQL用于SQL和结构…

Linux中cat命令的英文含义

我之前一直在想cat不是猫的意思吗&#xff0c;但是cat命令在Linux中并不是指"猫"这个动物&#xff0c;而是来源于它的功能&#xff1a;concatenate&#xff08;连接&#xff09;和typeset&#xff08;打印&#xff09;。这个命令的名称是这两个功能的首字母缩写。尽管…

DevExpress WPF中文教程:Grid - 如何显示摘要(设计时)?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

Mac/Linux安装JMeter压测工具

Mac安装JMeter压测工具 介绍 Apache JMeter™应用程序是开源软件&#xff0c;是一个100%纯的Java应用程序&#xff0c;旨在加载测试功能行为和衡量性能。它最初是为测试Web应用程序而设计的&#xff0c;但后来扩展到其他测试功能。 我能用它做什么&#xff1f; Apache JMet…

vue高德地图使用

先根据官方方法给vue项目引入高德 高德文档地址 做好准备后使用 初始化地图 AMap.plugin(AMap.MoveAnimation, () >{//地图this.map new AMap.Map("mapContainer", {resizeEnable: true,center: [116.397447,39.909176],//地图中心坐标zoom:12,//缩放值});this.…