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

1
00:00:01,720 --> 00:00:03,950
下一个我们要讲的就是

2
00:00:04,660 --> 00:00:07,420
数据映射器这个模式

3
00:00:09,760 --> 00:00:13,420
这个也是在数据源模式里面

4
00:00:13,430 --> 00:00:14,820
用得最广泛的

5
00:00:16,250 --> 00:00:19,170
大多数都是用

6
00:00:19,180 --> 00:00:21,540
数据映射器模式的产品

7
00:00:21,550 --> 00:00:25,370
来做数据库的访问

8
00:00:28,710 --> 00:00:29,660
我们看它的定义

9
00:00:31,100 --> 00:00:34,530
在保持对象

10
00:00:34,800 --> 00:00:37,190
还有数据库以及映射器本身

11
00:00:37,360 --> 00:00:39,070
彼此独立的情况下

12
00:00:40,080 --> 00:00:43,640
在二者之间移动数据的一个映射器层

13
00:00:45,860 --> 00:00:48,050
彼此独立的意思就是什么

14
00:00:48,650 --> 00:00:50,970
可以换了

15
00:00:51,100 --> 00:00:52,450
比如说,你可以换数据库

16
00:00:53,920 --> 00:00:58,460
后面可以是关系数据库

17
00:00:58,710 --> 00:01:02,870
关系数据库也可以换不同产品

18
00:01:05,320 --> 00:01:07,030
包括映射器本身也可以换

19
00:01:07,620 --> 00:01:07,940


20
00:01:08,860 --> 00:01:12,810
比如说,你本来用,如果是映射器

21
00:01:13,510 --> 00:01:15,700
你本来用的是,比如说

22
00:01:16,030 --> 00:01:16,700
Hibernate

23
00:01:17,530 --> 00:01:26,120
你换成Mybatis之类的,都可以换

24
00:01:31,960 --> 00:01:32,390
我们来看

25
00:01:33,900 --> 00:01:36,740
映射器的好处就是说

26
00:01:36,750 --> 00:01:41,520
它可以保持领域层干净

27
00:01:41,530 --> 00:01:46,360
我们前面讲的活动记录也好

28
00:01:50,960 --> 00:01:51,960
入口也好

29
00:01:52,640 --> 00:01:53,780
入口它本身就是

30
00:01:55,770 --> 00:01:58,430
没有领域逻辑在里面了

31
00:01:59,490 --> 00:02:02,880
就是数据在内存的一个映射

32
00:02:02,890 --> 00:02:06,650
活动记录就是在入口之上加上领域逻辑

33
00:02:09,470 --> 00:02:13,730
但是映射器这里

34
00:02:13,860 --> 00:02:16,730
Person这个类

35
00:02:17,050 --> 00:02:19,090
它就可以是干净的

36
00:02:19,300 --> 00:02:21,700
里面只有领域概念

37
00:02:21,830 --> 00:02:25,030
一些领域的操作

38
00:02:25,730 --> 00:02:35,310
没有跟数据访问相关的或者其他

39
00:02:35,910 --> 00:02:38,030
领域类它就可以不知道数据库的存在

40
00:02:38,780 --> 00:02:42,500
也不需要知道映射器的存在

41
00:02:43,770 --> 00:02:47,170
意味着整个映射器是可以更换的

42
00:02:47,780 --> 00:02:50,720
因为它本身根本就不知道

43
00:02:50,730 --> 00:02:51,800
你用了什么映射器

44
00:02:52,140 --> 00:02:53,300
也不知道你用了什么数据库

45
00:02:54,410 --> 00:02:56,180
所以你完全可以

46
00:02:56,860 --> 00:03:01,650
换另外一个映射器来配合它

47
00:03:06,780 --> 00:03:13,320
显然,这样一种模式

48
00:03:13,330 --> 00:03:16,230
它在什么情况下是比较适合的

49
00:03:18,370 --> 00:03:20,730
数据库和领域是单独演变的

50
00:03:22,030 --> 00:03:23,830
这样一种方式是比较适合的

51
00:03:26,180 --> 00:03:28,640
但实际上大家都觉得

52
00:03:28,650 --> 00:03:30,120
自己的应用

53
00:03:30,130 --> 00:03:32,900
都希望单独演变

54
00:03:33,030 --> 00:03:34,770
但在实际中

55
00:03:35,140 --> 00:03:36,930
我们往往就高估了

56
00:03:38,000 --> 00:03:42,120
平台的单独演变这种可能性

57
00:03:42,690 --> 00:03:43,440
很多时候

58
00:03:43,450 --> 00:03:48,400
我们根本就没有真正的这种需要

59
00:03:50,220 --> 00:03:53,070
但是这个作为它的一个优点

60
00:03:56,240 --> 00:04:00,020
跟其他的相比

61
00:04:00,840 --> 00:04:01,760
这是一个优点

62
00:04:02,990 --> 00:04:07,670
第二个,肯定是面向对象的

63
00:04:07,680 --> 00:04:10,840
因为你要保持领域对象的干净

64
00:04:10,850 --> 00:04:12,600
领域逻辑

65
00:04:13,840 --> 00:04:18,480
是因为你是面向对象的这种实现

66
00:04:19,190 --> 00:04:20,880
才有必要这样来做

67
00:04:20,890 --> 00:04:22,760
否则你根本不是面向对象的

68
00:04:22,770 --> 00:04:27,050
你前面都没有什么对象的封装等等

69
00:04:27,770 --> 00:04:30,320
你就直接用一个入口就可以了

1
00:00:00,570 --> 00:00:04,040
下面这个就是映射器的类图了

2
00:00:06,480 --> 00:00:09,480
当然这个画得比较简单了

3
00:00:09,490 --> 00:00:12,190
就是说,映射器负责依赖这两边

4
00:00:12,400 --> 00:00:14,860
但这两边互相是不知道的

5
00:00:19,000 --> 00:00:22,850
序列图,这是书上我们截屏下来的序列图

6
00:00:23,490 --> 00:00:25,040
从数据库检索数据

7
00:00:27,680 --> 00:00:32,020
由映射器来取

8
00:00:32,110 --> 00:00:35,880
然后这里如果说

9
00:00:36,610 --> 00:00:38,090
map

10
00:00:38,100 --> 00:00:42,240
就是一个内存里面

11
00:00:42,450 --> 00:00:44,280
的映射还不存在

12
00:00:44,690 --> 00:00:47,120
这里就给它新建一个

13
00:00:48,090 --> 00:00:50,310
存在,就直接用这个就行了

14
00:00:52,880 --> 00:00:58,670
然后get如果是没有,返回空

15
00:00:58,680 --> 00:01:03,520
那么就访问数据库得到数据

16
00:01:03,530 --> 00:01:08,060
然后由它来把这个对象

17
00:01:08,070 --> 00:01:09,980
在内存里面创建起来

18
00:01:10,690 --> 00:01:12,600
相当于把数据库里面的数据

19
00:01:12,610 --> 00:01:13,640
搬到内存里面

20
00:01:13,650 --> 00:01:14,880
来建立一个映像

21
00:01:16,180 --> 00:01:19,060
当然,同时要把它加到map里面

22
00:01:19,070 --> 00:01:21,020
如果map里面不存在

23
00:01:23,060 --> 00:01:24,620
更新也是一样,更新

24
00:01:24,630 --> 00:01:27,900
把数据拿过来

25
00:01:28,680 --> 00:01:32,220
由它来更新到数据库里面去

26
00:01:33,140 --> 00:01:36,330
这些一会我们在演示示例代码的时候

27
00:01:36,990 --> 00:01:38,980
都会慢慢看到的

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

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

相关文章

【软件工程中的喷泉模型及其优缺点】

文章目录 一、喷泉模型是什么?二、喷泉模型的优点1. 灵活性和适应性2. 迭代开发3. 风险控制 三、喷泉模型的缺点1. 需求不明确性2. 可能造成资源浪费3. 需要良好的沟通与协作 一、喷泉模型是什么? 喷泉模型是一种迭代增量开发模型,其核心理念…

链篦机回转窑球团生产工艺

生球在回转窑氧化焙烧,回转窑头部设有燃烧器,燃料可以采用气体、固体、液体。 来自环冷机一冷却段的高温废气作为二次风进入窑内参与燃烧,烧成成品球进入环冷机。 环冷机采用鼓风冷却,热风风箱分为四段: 一段气体引至…

无人机有哪些关键技术?

一、控制技术 无人机的核心还是在控制上,飞控系统的可靠性、稳定性及可扩展性是其中重要的指标。可靠性上,除了器件选型之外,目前主要靠多余度来增加;稳定性主要体现在多场景下仍能保持良好的工作状态,主要靠算法来进…

QML-各类布局

Colunm布局 Column{id:colspacing: 30Repeater{id:repmodel: ListModel{}Button{width: 100height: 50text: "btn"index}}//开始时候移动move: Transition {NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce }}//添加时变化add:Transi…

【Nginx】docker运行Nginx及配置

Nginx镜像的获取 直接从Docker Hub拉取Nginx镜像通过Dockerfile构建Nginx镜像后拉取 二者区别 主要区别在于定制化程度和构建过程的控制: 直接拉取Nginx镜像: 简便性:直接使用docker pull nginx命令可以快速拉取官方的Nginx镜像。这个过程…

通透!手把教你如何从头构建一个机器学习模型

目录 1.业务理解 2.数据收集和准备 数据采集 探索性数据分析 (EDA) 和数据清理 特征选择 3.建立机器学习模型 选择正确的模型 分割数据 训练模型 模型评估 4.模型优化 5.部署模型 今天我将带领大家一步步的来构建一个机器学习模型。 我们将按照以下步骤开发客户流失…

赛博解压板

目录 开头程序程序的流程图程序的解压效果(暂无,但可以运行一下上面的代码)结尾 开头 大家好,我叫这是我58。今天,我们要看关于赛博解压板的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #define ROW 6//ROW表示行数,可…

【ARM 常见汇编指令学习 7.1 -- LDRH 半字读取指令】

请阅读【嵌入式开发学习必备专栏】 文章目录 LDRH 使用介绍LDRH(Load Register Half-word)总结 LDRH 使用介绍 在ARMv9架构中,汇编指令LDRH用于从内存中载入数据到寄存器的指令,下面将分别对它进行详细介绍: LDRH&am…

【基础算法】UE中实现轮播

本期作者:尼克 易知微3D引擎技术负责人 当前N 总数M 从0到M-1 从1到M 感谢阅读,以上内容均由易知微3D引擎团队原创设计,以及易知微版权所有,转载请注明出处,违者必究,谢谢您的合作。申请转载授权后台回复【…

【WebKit屏幕方向API全解析】掌握现代Web应用的方向感应

标题:【WebKit屏幕方向API全解析】掌握现代Web应用的方向感应 WebKit作为许多现代浏览器的内核,提供了对HTML5和CSS3的广泛支持,包括对屏幕方向的控制。屏幕方向API(Screen Orientation API)允许Web应用知道屏幕的方向…

左耳听风_114_113_Go编程模式修饰器

你好,我是陈浩,我名多尔多house.之前呢我写过一篇文章叫做python修饰器的函数式编程。 那这种模式呢可以很轻松的把一些函数啊装配到另外一些函数上。 让你的代码呢更加简单,也可以让一些小功能性的代码复用性更高。 让代码中的函数呢可以…

掌握XD数字设计:打造令人惊艳的用户体验

xd是adobe旗下一款主打UI界面设计-建立原型的软件,它可以将wireframe、design、以及prototype等UI/UX设计流程整合到一个软件中,算是一款与sketch对打的软件。 与PS相比,在UI设计方面,Adobe XD有非常突出的3个优点:能…

从0到1手写vue源码

模版引擎 数组join法(字符串) es6反引号法(模版字符串换行) mustache (小胡子) 引入mustache 模版引擎的使用 mustache.render(templatestr,data) mustache.render 循环简单数组 循环复杂数组 循环单项数组 数组的嵌套 musta…

江苏徐州SAP代理商有哪些?怎么选择?

在数字化浪潮席卷全球的今天,企业对于高效、智能的管理系统需求日益迫切。SAP作为全球领先的企业管理软件解决方案提供商,其产品在市场上享有极高的声誉。而在江苏徐州,哲讯智能科技作为SAP的代理商,以其专业的技术实力和优质的服…

开源205W桌面充电器,140W+65W升降压PD3.1快充模块(2C+1A口),IP6557+IP6538

开源一个基于IP6557和IP6538芯片的205W升降压快充模块(140W65W),其中一路C口支持PD3.1协议,最高输出28V5A,另一路是A口C口,最高输出65W(20V3.25A),可搭配一个24V10A的开关…

代码随想录算法训练营第3天|LeetCode

203.移除链表元素 题目链接:203. 移除链表元素 - 力扣(LeetCode) 文档链接:代码随想录 (programmercarl.com) 视频链接:手把手带你学会操作链表 | LeetCode:203.移除链表元素_哔哩哔哩_bilibili 第一想法 …

SpringBoot-第一天学习

SpringBoot介绍-约定大于配置 SpringBoot是在Spring4.0基础上开发的,不是替代Spring的解决方案,而是和Spring框架结合并进一步简化Spring搭建和开发过程的。 如何简化?就是通过提供默认配置等方式让我们更容易,集成了大量常用的…

交叉测试的优点和缺点!

交叉测试在软件测试中具有重要的地位和作用。通过交叉测试,可以提高软件质量、提升用户体验、增加测试覆盖率、提高测试效率以及满足市场需求和竞争优势。因此,在软件开发和测试过程中,应充分重视交叉测试的实施和应用。 以下是对其优缺点的…

推荐3款Windows系统的神级软件,免费、轻量、绝对好用!

DiskView DiskView是一款用于管理和查看磁盘空间的工具,它集成了于微软的Windows操作系统资源管理器中,以显示直观的磁盘空间使用情况。该软件通过生成图形化地图,帮助用户组织和管理大量文件和文件夹,从而高效地管理磁盘空间。用…

JDBC 学习笔记+代码整理

Tip Idea自带可视界面👉MySQL 图形化界面-CSDN博客 Idea2022无add Framework support选项👉最新版IDEA:Add web Framework Support步骤/构建JavaWeb项目步骤_idea add framework support-CSDN博客 基本步骤 1.加载驱动包Driver 2.建立与数据库的连接C…