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

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

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

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

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

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

一、跳到最后一步

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

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

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

二、單向邊界

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

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

圖片

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

三、外觀

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

圖片

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

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

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

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

2022-11-30 15:15:48

2009-09-08 10:37:57

C#遍歷CheckBo

2021-07-13 12:31:27

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

2013-01-04 15:47:54

Android開發(fā)平鋪UI設(shè)計

2015-05-07 15:19:47

IaaSPaaSAzure

2024-05-28 08:17:54

2019-08-30 17:24:41

microservic微服務(wù)

2009-07-08 12:56:32

編寫Servlet

2015-12-11 09:24:38

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

2016-09-12 14:07:14

Android 定時器

2014-12-31 17:42:47

LBSAndroid地圖

2021-06-24 08:52:19

單點登錄代碼前端

2021-11-05 21:33:28

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

2010-08-26 16:19:41

DIV圓角

2010-09-06 10:04:31

CSS樣式表

2022-05-30 07:07:35

Java監(jiān)聽文件Java 8

2009-06-23 10:45:18

Hibernate支持

2009-12-09 09:48:38

solaris靜態(tài)路由

2011-06-10 10:43:12

Ubuntu應(yīng)用安裝

2022-03-04 14:52:27

云計算開源
點贊
收藏

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