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

news2024/10/5 21:26:23

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.coloradmin.cn/o/1886216.html

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

相关文章

高编:进程间通信 IPC interprocess communicate

一、进程间三大类通信 1、古老的通信方式 无名管道 有名管道 信号 2、IPC对象通信 system v(5) BSD suse fedora kernel.org 消息队列(用的相对少,这里不讨论) 共享内存 信号量集(进程间做互斥与同步semaphore) 3、socket通信 网络通…

AD快速导入立创3D模型

在AD绘制PCB时,可以添加3D模型,在绘制完成PCB后就可以导出3D图给结构工程师核对,方便产品的开发。这里介绍一种可以比较快完成3D导入的方式。 一、PyCharm代码 打开PyCharm,在运行本代码时,需要安装第三方包codecs&a…

synchronized用法解析

锁的意义: 比如我跟我老弟要用电脑,我想学java,他想拿电脑打LOL,如果我敲java代码敲的正嗨皮,他突然把电脑抢了过去,代码还没保存,就被他拿去打LOL了,很✓8,那么如何解决…

基于人脸68特征点识别的美颜算法(一) 大眼算法 C++

1、加载一张原图&#xff0c;并识别人脸的68个特征点 cv::Mat img cv::imread("5.jpg");// 人脸68特征点的识别函数vector<Point2f> points_vec dectectFace68(img);// 大眼效果函数Mat dst0 on_BigEye(800, img, points_vec);2、函数 vector<Point2f&g…

BMA580 运动传感器

型号简介 BMA580是博世&#xff08;bosch-sensortec&#xff09;的一款先进的、超小型加速度传感器。具有独特的骨传导语音活动检测功能和先进的功率模式功能&#xff0c;是世界上最小的加速度传感器&#xff08;1.2 x 0.8 x 0.55 mm&#xff09;。它专为紧凑型设备&#xff08…

Query Rewriting for Retrieval-Augmented Large Language Models

文章目录 题目摘要方法实验 题目 检索增强大语言模型的查询重写 论文地址&#xff1a;https://arxiv.org/abs/2305.14283 项目地址&#xff1a;https://github.com/xbmxb/RAG-query-rewriting 摘要 大语言模型&#xff08;LLM&#xff09;在检索--然后阅读&#xff08;retriev…

Hack The Box-Blazorized

总体思路 Blazor JWT->SPN劫持->登录脚本劫持->DCSync 信息收集&端口利用 nmap -sSVC blazorized.htbStarting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-01 02:37 EDT Nmap scan report for blazorized.htb (10.10.11.22) Host is up (0.30s latency). N…

【网络安全】修改Host文件实现域名解析

场景 开发一个网站或者服务&#xff0c;需要在本地测试时&#xff0c;可以将线上的域名指向本地开发环境的IP地址。从而模拟真实环境中的域名访问&#xff0c;方便调试和开发。 步骤 1、以管理员身份打开命令提示符 2、编辑hosts文件&#xff1a; 输入以下命令打开hosts文…

云卓SKYDROID-H12PRO——只有你想不到的,没有我们做不到的

H12PRO采用高通八核处理器&#xff0c;搭载安卓嵌入式系统&#xff0c;采用先进的OFDM技术&#xff0c;和超级协议栈。让图像更加清晰&#xff0c;延迟更低&#xff0c;距离更远&#xff0c;抗干扰性更强&#xff0c;并支持1080P视频传输。支持SIM、数字摄像头、串口、s.bus、网…

SQL注入实战

1、orderBy报错注入 某大学 www.target.com?orderBy1 注入为orderBy注入&#xff0c;将orderby更改为id测试时并不能造成报错回显故不能当注入点 正常状态下 经过测试可知共14列&#xff0c;orderBy15时报错&#xff0c;由于列名可控?orderby$id 这里使用XPath报错注入&a…

放大器的输入电容Cin对放大电路的影响

1、OPA859构成的放大电路的设计 图中OPA859的增益G设定为1.16 &#xff0c;OPA859的增益带宽积GBP 900M , 放大器的带宽BW GBP / Acl 900 / 1.16 775.86M。 图&#xff1a;OPA859放大电路 由于需要在放大电路上加带宽的限制&#xff0c;所以在OPA859放大电路上有个低通限…

Java + MySQL 实现存储完整 Json

Java + MySQL 实现存储完整 Json 一、应用场景二、数据库配置三、后端代码配置1、实体类2、Service 实现类3、xml 文件四、测试1、新增接口2、查询接口3、数据表内容一、应用场景 将前端传过来的 Json 完整存储到 MySQL 中,涉及技术栈为 Java、MyBatis、MySQL。 注意:MySQL…

idea xml ctrl+/ 注释格式不对齐

处理前 处理后 解决办法 取消这两个勾选

LabVIEW代码性能优化

优化LabVIEW代码以提高软件性能是确保系统高效运行的关键。通过分析代码结构、数据管理、并行处理、内存使用和硬件资源的有效利用&#xff0c;我们可以从多个角度提升LabVIEW程序的执行速度和稳定性。 代码结构优化 模块化编程 将复杂的程序分解成多个子VI&#xff0c;每个子V…

Linux系统中交叉编译opencv库

目标&#xff1a;将opencv进行交叉编译&#xff0c;使其能在rk3326板子上运行使用。 环境&#xff1a; ubuntu&#xff1a;18.04 opencv:4.5.4 opencv源码从挂网下载&#xff1a;opencv源码下载地址 交叉编译链&#xff1a;gcc-arm-10.3-linux-gun 一.环境准备 1.交叉编译链我…

论文学习——使用基于多项式拟合的预测算法求解动态多目标问题

论文题目&#xff1a;Solving dynamic multi-objective problems using polynomial fitting-based prediction algorithm 使用基于多项式拟合的预测算法求解动态多目标问题&#xff08;Qingyang Zhang , Xiangyu He,Shengxiang Yang , Yongquan Dong , Hui Song , Shouyong Ji…

shopify后台设置为中文

shopify官网&#xff1a;https://link.juejin.cn/?targethttps%3A%2F%2Fshopify.dev%2F 1、点击右上角头像 2、选择个人资料 3、找到Language设置 开发者 1、创建开发商店 2、 3、点击左侧导航在线商店&#xff0c;点击右上角查看你的商店。在线商店链接为https://[商店名…

【FPGA 学习与实践】<初阶> 项目周计划

第1-2周&#xff1a;基础项目 - 4位加法器和计数器 目标&#xff1a;掌握Verilog基本语法和模块设计。 第1周&#xff1a; 学习Verilog的基本语法和结构&#xff08;模块、端口、数据类型&#xff09;。设计并实现一个4位加法器。编写测试平台&#xff08;Testbench&#xff0…

38、shell之免交互

免交互 交互&#xff1a;我们发出指令控制程序的运行&#xff0c;程序在接收到指令之后按照指令的效果做出对应的反应。 免交互&#xff1a;间接的&#xff0c;通过第三方的方式把指令传送给程序&#xff0c;不用直接的下达指令。 一、Here Document 免交互&#xff1a; 这…

谈谈在不同公司中的SAP职位

今天反客为主&#xff0c;聊一下这个HR的话题&#xff0c;考虑到SAP职位的专业性&#xff0c;感觉还是有必要谈一谈这个话题。最近跟几位HR的小伙伴聊了一下&#xff0c;讨论了下不同公司的SAP职位的招聘要求&#xff0c;感觉还是有那么几个存在的问题&#xff1a; 追求完美的…