[圖解]企業應用架構模式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.pswp.cn/web/40410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40410.shtml
英文地址,請注明出處:http://en.pswp.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…