偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

打破架構(gòu)邊界:三種簡(jiǎn)單卻高效的實(shí)現(xiàn)方法!

開(kāi)發(fā) 架構(gòu)
客戶端對(duì)所有這些服務(wù)類都具有傳遞性依賴。在靜態(tài)語(yǔ)言中,對(duì)其中一個(gè)服務(wù)類源代碼的更改將強(qiáng)制客戶端重新編譯。此外,你可以想象使用此結(jié)構(gòu)創(chuàng)建反向通道是多么容易。

構(gòu)建完整的架構(gòu)邊界的成本是很高的。需要為系統(tǒng)設(shè)計(jì)雙向多態(tài)的邊界接口、輸入和輸出數(shù)據(jù)結(jié)構(gòu)以及所有必要的依賴管理,以便將兩個(gè)部分隔離為可獨(dú)立編譯和部署的組件。這涉及大量的工作和后期維護(hù)。

許多情況下,一個(gè)好的架構(gòu)師可能會(huì)認(rèn)為設(shè)置這樣的邊界的開(kāi)支太高,但仍然希望為以后可能需要的邊界留下位置。

這種預(yù)判性設(shè)計(jì)常常被敏捷社區(qū)中的許多人指責(zé)為違反 YAGNI(你不會(huì)需要它)原則。然而,架構(gòu)師可能會(huì)看到問(wèn)題并想到:“是啊,但是我可能會(huì)需要’在這種情況下,他們可能會(huì)實(shí)現(xiàn)一個(gè)不完全邊界。

一、跳到最后一步

構(gòu)造不完全邊界的一種方法是將系統(tǒng)分割成一系列可以獨(dú)立編譯和部署的組件,之后再把它們組合成一個(gè)組件。換言之,將相應(yīng)的接口和輸入/輸出數(shù)據(jù)結(jié)構(gòu)都設(shè)置好,并且一切都已準(zhǔn)備妥當(dāng),但我們?nèi)赃x擇將這些組件編譯和部署為單個(gè)組件。

顯然,這種不完全邊界需要與完全邊界同樣數(shù)量的代碼和設(shè)計(jì)工作。但是它不需要管理多個(gè)組件。沒(méi)有版本號(hào)跟蹤或發(fā)布管理負(fù)擔(dān)。這一差異不容忽視。這是 FitNesse 的早期策略。FitNesse 的網(wǎng)絡(luò)服務(wù)器組件被設(shè)計(jì)為可與 FitNesse的 wiki 和測(cè)試部分分離。這樣,我們就可以使用該網(wǎng)絡(luò)組件創(chuàng)建其他基于 Web 的應(yīng)用程序。同時(shí),我們不希望用戶下載兩個(gè)組件。請(qǐng)記住,我們的一個(gè)設(shè)計(jì)目標(biāo)是“下載并運(yùn)行”。我們的意圖是用戶下載一個(gè)jar 文件并執(zhí)行它,而不必尋找其他 jar 文件,解決版本兼容性等問(wèn)題。

FitNesse 的經(jīng)歷也揭示了這種方式的其中一個(gè)危害。隨著時(shí)間的推移,人們逐漸認(rèn)識(shí)到不再需要單獨(dú)的 Web 組件,Web 組件和 wiki 組件之間的分離開(kāi)始變得脆弱。依賴關(guān)系開(kāi)始朝著錯(cuò)誤的方向交叉?,F(xiàn)在,重新分離它們可能會(huì)是一項(xiàng)煩瑣的任務(wù)。

二、單向邊界

完全成熟的架構(gòu)邊界使用雙向邊界接口來(lái)保持雙向隔離。維護(hù)這種雙向的隔離性,通常不會(huì)是一次性的工作,需要我們持續(xù)投入資源。

圖 24.1 顯示了一個(gè)更簡(jiǎn)單的結(jié)構(gòu),用于暫時(shí)保留以后擴(kuò)展為完全邊界的位置它展示了傳統(tǒng)的策略模式。serviceBoundary(服務(wù)邊界)接口由客戶端使用并由 serviceImpl(服務(wù)具體實(shí)現(xiàn))類實(shí)現(xiàn)。

圖片

上述設(shè)計(jì)顯然為未來(lái)的架構(gòu)邊界打下了基礎(chǔ)。為了將 Client(客戶端)與ServiceImpl隔離開(kāi)來(lái),必須進(jìn)行必要的依賴反轉(zhuǎn)。同時(shí),我們清楚看到分離可能會(huì)相當(dāng)迅速地降級(jí),如圖示中的惡意虛線所示。由于沒(méi)有雙向接口,除了依賴開(kāi)發(fā)人員和架構(gòu)師的勤勉和自律,沒(méi)有任何事物可以防止這種反向通道的出現(xiàn)。

三、外觀

一個(gè)更簡(jiǎn)單的邊界是外觀模式,如圖24.2所示。在這種情況下,不需要使用依賴反轉(zhuǎn)。該邊界僅由 Facade(外觀)類定義,該類將所有服務(wù)列為方法,并將服務(wù)調(diào)用部署到客戶端不應(yīng)訪問(wèn)的類中。

圖片

請(qǐng)注意,客戶端對(duì)所有這些服務(wù)類都具有傳遞性依賴。在靜態(tài)語(yǔ)言中,對(duì)其中一個(gè)服務(wù)類源代碼的更改將強(qiáng)制客戶端重新編譯。此外,你可以想象使用此結(jié)構(gòu)創(chuàng)建反向通道是多么容易。

我們已經(jīng)看到了部分實(shí)現(xiàn)不完全邊界的三種簡(jiǎn)單方法。當(dāng)然,還有很多其他方法。這三種策略僅作為示例提供。

這些方法中的每一種都有其自己的成本和收益。在特定的情況下,每種方法都是適宜的,作為一個(gè)最終完全邊界的替代方案。如果該邊界從未實(shí)現(xiàn),則每種方法都可能會(huì)受到損害。

責(zé)任編輯:武曉燕 來(lái)源: JAVA日知錄
相關(guān)推薦

2022-11-30 15:15:48

2009-09-08 10:37:57

C#遍歷CheckBo

2013-01-04 15:47:54

Android開(kāi)發(fā)平鋪UI設(shè)計(jì)

2021-07-13 12:31:27

IT組織改進(jìn)首席技術(shù)官

2015-05-07 15:19:47

IaaSPaaSAzure

2019-08-30 17:24:41

microservic微服務(wù)

2021-11-05 21:33:28

Redis數(shù)據(jù)高并發(fā)

2014-12-31 17:42:47

LBSAndroid地圖

2021-06-24 08:52:19

單點(diǎn)登錄代碼前端

2024-05-28 08:17:54

2009-07-08 12:56:32

編寫(xiě)Servlet

2015-12-11 09:24:38

加密數(shù)據(jù)Linux

2016-09-12 14:07:14

Android 定時(shí)器

2010-08-26 16:19:41

DIV圓角

2022-03-04 14:52:27

云計(jì)算開(kāi)源

2009-05-07 15:02:42

OracleJoin查詢

2009-12-09 09:48:38

solaris靜態(tài)路由

2011-06-10 10:43:12

Ubuntu應(yīng)用安裝

2009-06-23 10:45:18

Hibernate支持

2010-09-06 10:04:31

CSS樣式表
點(diǎn)贊
收藏

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