自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

模塊化單體應(yīng)用的數(shù)據(jù)隔離

系統(tǒng) 數(shù)據(jù)庫(kù)
模塊化單體通過定義良好的模塊邊界和通信模式來強(qiáng)制執(zhí)行更好的架構(gòu)實(shí)踐。但一個(gè)你不能忽視的方面是模塊之間的數(shù)據(jù)隔離,數(shù)據(jù)隔離確保模塊相互獨(dú)立且耦合度低。

模塊化單體應(yīng)用是一種日益流行的架構(gòu)方法,它結(jié)合了模塊化和單體設(shè)計(jì)的優(yōu)點(diǎn),模塊化單體試圖解決單體和微服務(wù)架構(gòu)的不足之處。

我經(jīng)??吹降膯误w架構(gòu)問題之一是組件之間的緊耦合,這導(dǎo)致系統(tǒng)不同部分之間存在依賴關(guān)系。模塊化單體通過定義良好的模塊邊界和通信模式來強(qiáng)制執(zhí)行更好的架構(gòu)實(shí)踐。

但一個(gè)你不能忽視的方面是模塊之間的數(shù)據(jù)隔離,數(shù)據(jù)隔離確保模塊相互獨(dú)立且耦合度低。

今天,我將向你展示模塊化單體的四種數(shù)據(jù)隔離方法:

  • 分離表
  • 分離模式
  • 分離數(shù)據(jù)庫(kù)
  • 不同持久化

為什么數(shù)據(jù)隔離很重要?

首先讓我們了解在模塊化單體架構(gòu)中為什么數(shù)據(jù)隔離很重要。

模塊化單體對(duì)數(shù)據(jù)完整性有嚴(yán)格的規(guī)定:

  • 每個(gè)模塊只能訪問自己的表
  • 沒有共享表或?qū)ο蟮那闆r
  • 只允許在同一模塊的表之間進(jìn)行連接

模塊化單體中的模塊應(yīng)該是自包含的。每個(gè)模塊處理自己的數(shù)據(jù)。其他模塊可以使用模塊的公共 API 訪問該數(shù)據(jù)。

這種設(shè)計(jì)有哪些好處呢?

保持模塊相互隔離有助于促進(jìn)模塊化和松耦合。引入新的系統(tǒng)更改變得更容易。在組件松耦合時(shí),副作用會(huì)減少。

如果你使用關(guān)系數(shù)據(jù)庫(kù),你仍然可以保持參照完整性。提取表時(shí)移除外鍵不是問題。

等級(jí) 1 — 分離表

最簡(jiǎn)單的解決方案是在數(shù)據(jù)庫(kù)級(jí)別沒有隔離。所有模塊的表都存儲(chǔ)在一個(gè)數(shù)據(jù)庫(kù)中。很難確定哪些表屬于哪個(gè)模塊。

我只是出于完整性考慮提到這種方法。

然而,表越多,保持它們?cè)谀K之間的隔離就越困難。

你可以通過在表之間添加邏輯隔離來改進(jìn)這一點(diǎn)。

等級(jí) 2 — 分離模式

在數(shù)據(jù)庫(kù)中分組相關(guān)的表是引入邏輯隔離的一種方式。你可以使用數(shù)據(jù)庫(kù)模式來實(shí)現(xiàn)這一點(diǎn)。每個(gè)模塊都有一個(gè)包含該模塊表的唯一模式。

現(xiàn)在,很容易區(qū)分哪個(gè)模塊包含哪些表。

使用多個(gè) EF Core 數(shù)據(jù)庫(kù)上下文是實(shí)現(xiàn)此目的的一種簡(jiǎn)單方法。

你還可以引入規(guī)則來阻止從其他模塊查詢數(shù)據(jù)。例如,你可以使用架構(gòu)測(cè)試來實(shí)現(xiàn)這一點(diǎn)。

在構(gòu)建模塊化單體時(shí),我總是從邏輯數(shù)據(jù)隔離開始。

但如果這還不夠呢?

等級(jí) 3 — 分離數(shù)據(jù)庫(kù)

下一個(gè)數(shù)據(jù)隔離級(jí)別是將每個(gè)模塊的數(shù)據(jù)移至單獨(dú)的數(shù)據(jù)庫(kù)。與使用模式進(jìn)行數(shù)據(jù)隔離相比,這種方法有更多的約束。

如果你需要模塊之間嚴(yán)格的數(shù)據(jù)隔離規(guī)則,這是正確的方法。但是,缺點(diǎn)是操作上更加復(fù)雜。你必須管理多個(gè)數(shù)據(jù)庫(kù)的基礎(chǔ)設(shè)施。

然而,這是提取模塊的絕佳步驟。

首先,你將要提取的模塊的表移動(dòng)到單獨(dú)的數(shù)據(jù)庫(kù)中。這也迫使你解決模塊之間的任何數(shù)據(jù)庫(kù)耦合問題。一旦將表移動(dòng)到單獨(dú)的數(shù)據(jù)庫(kù),你就準(zhǔn)備好提取該模塊了。

我們能否進(jìn)一步實(shí)現(xiàn)模塊數(shù)據(jù)隔離?

等級(jí) 4 — 不同持久化

誰(shuí)說你必須為所有模塊使用相同的數(shù)據(jù)庫(kù)類型?

我大多數(shù)時(shí)間都使用關(guān)系(SQL)數(shù)據(jù)庫(kù)。關(guān)系數(shù)據(jù)庫(kù)很棒,解決了各種問題。但有時(shí),文檔或圖形數(shù)據(jù)庫(kù)是更好的解決方案。

這里的思路類似:使用單獨(dú)的數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)隔離。

但是,你可以引入不同的數(shù)據(jù)庫(kù)類型來解決特定問題。例如,你可以為一個(gè)模塊使用關(guān)系數(shù)據(jù)庫(kù),而為另一個(gè)模塊使用圖形或列存儲(chǔ)數(shù)據(jù)庫(kù)。你還必須在應(yīng)用程序中維護(hù)不同的持久化模型。

對(duì)于你的使用案例來說,這可能是一種有價(jià)值的

權(quán)衡。但需要仔細(xì)規(guī)劃。

總結(jié)

如果你暫時(shí)不需要微服務(wù),模塊化單體是一個(gè)很好的選擇。你可以將應(yīng)用程序作為單體進(jìn)行開發(fā),并在系統(tǒng)內(nèi)部建立明確的邊界。你仍然可以提取模塊并轉(zhuǎn)移到微服務(wù)。但是模塊化單體可以更快地進(jìn)行開發(fā)。

模塊必須遵守一些規(guī)則。它們只能訪問自己的表。它們不能與其他模塊共享表。它們不能直接查詢其他模塊的表。這些規(guī)則有助于實(shí)現(xiàn)模塊之間的數(shù)據(jù)隔離。

但是你仍然必須在數(shù)據(jù)庫(kù)級(jí)別實(shí)現(xiàn)數(shù)據(jù)隔離。

有四種選項(xiàng)供你選擇:

?分離表?分離模式?分離數(shù)據(jù)庫(kù)?不同持久化

我總是選擇使用模式進(jìn)行邏輯隔離。這很容易實(shí)現(xiàn),并幫助我更好地理解我的邊界。根據(jù)要求,我可以隨后引入單獨(dú)的數(shù)據(jù)庫(kù)。希望這有所幫助。

責(zé)任編輯:趙寧寧 來源: 小技術(shù)君
相關(guān)推薦

2023-12-19 22:29:37

架構(gòu)微服務(wù)系統(tǒng)

2022-09-21 11:51:26

模塊化應(yīng)用

2010-08-02 09:10:36

Flex模塊化

2019-08-28 16:18:39

JavaScriptJS前端

2018-06-21 09:36:09

模塊化數(shù)據(jù)中心集中化

2016-12-21 17:02:35

數(shù)據(jù)中心MDC模塊化

2020-09-17 10:30:21

前端模塊化組件

2020-09-18 09:02:32

前端模塊化

2009-11-30 09:47:44

模塊化路由器

2009-12-03 20:15:13

模塊化路由器

2018-03-01 15:24:43

模塊化數(shù)據(jù)中心機(jī)房

2016-12-02 15:56:36

模塊化數(shù)據(jù)中心

2022-06-10 10:38:07

數(shù)據(jù)中心模塊化設(shè)計(jì)服務(wù)器

2022-09-05 09:01:13

前端模塊化

2019-07-11 14:16:27

數(shù)據(jù)中心設(shè)計(jì)系統(tǒng)

2016-10-09 11:03:41

Javascript模塊化Web

2021-12-24 07:10:36

架構(gòu)分層模塊化

2018-06-26 15:20:52

模塊化數(shù)據(jù)中心UPS

2016-12-09 15:25:16

數(shù)據(jù)中心配電IT

2015-07-02 13:21:44

模塊化數(shù)據(jù)中心
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)