精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

解讀六邊形架構

企業動態
追溯微服務架構的淵源,一般會涉及到六邊形架構。今天我們就來講講有關六邊形架構的內容。

追溯微服務架構的淵源,一般會涉及到六邊形架構。追溯六邊形架構的起源,要看始作俑者Alistair Cockburn的這篇文章 http://alistair.cockburn.us/Hexagonal+architecture, 讀原文,譯重點,記感受, 如下:

六邊形架構

六邊形架構意圖

采用同等的方式,應用可以通過用戶,程序,自動化測試或批處理腳本來驅動,而獨立于最終的運行環境及數據庫進行開發和測試。

當外部事件到達端口的時候,相應的適配器將其轉化成合適的過程調用或者消息,然后傳遞給應用,而應用對輸入設備一無所知。輸出內容時,應用通過端口把要傳遞出去的消息傳給適配器,適配器再針對信息接收者的具體實現要求將其轉化成合適的信號。從語義上來說,應用跟它周圍的適配器有著良好的互動,而對適配器外部的一切無感知。

這是一種設計模式,被Cockburn定義為“端口和適配器模式“,設計模式不僅指導了代碼的實現,同時支持結構的實現,又是一種解耦合的技巧。

所需解決的問題場景

不能解決問題的架構,都只是架構師手中的玩具。六邊形架構面對的一個典型問題是業務邏輯與用戶界面的代碼交叉,這是開發中一個非常令人頭痛的問題,有三個惡果:

  1. 系統無法方便地進行自動化測試,因為部分邏輯依賴界面元素的,比如輸入框的長度或按鈕的位置,而這些細節又是易變的;
  2. 同樣,無法把一個面向人機交互的系統移植到一個自動化處理的系統
  3. 另外,應用程序之間的相互驅動變得很困難,有時甚至不可能的

“***的那一層”出現了,可以在架構里增加一個新的層,并承諾不會有業務邏輯被放到著一新層里。然而隨著時間的推移,會發現新的層里還是摻雜了業務邏輯,于是老問題又出現了。

怎么辦呢?假設一下,如果應用提供的每一個功能都有相應的API會是怎樣的結果呢?QA可以通過自動化測試腳本來監測新改的代碼,檢驗是否會破壞已有的功能。業務專家在GUI出來之前就可以創建自動化測試用例,作為程序員們檢測是否正確完成工作的依據,同時,這也將成為測試部門所運行的測試的一部分。應用以"headless"模式部署,其它程序通過調用API的方式使用所提供的功能。這種方式使得復雜系統的設計變得容易,面向業務的應用之間不需要人工干預就可以互相調用。***,回歸測試檢測到出現問題的地方,并加以修復,而保證業務邏輯不會進入表現層。

另一個典型的問題是,如果應用綁定了外部數據庫或其它服務,當數據庫宕機或者正在遷移的時候,依賴數據庫的程序就無法正常工作。這會導致響應延遲,這是一種相當糟糕的體驗。

這兩個問題之間沒有明顯的聯系,但它們之間看起來是對稱的。這又是一種面向接口的設計么? 可以這樣理解,因為接口的概念外延太大了,而在具體的編程語言實現中,interface 有往往太小了。這里把它明確為端口和適配器。

方案

不論用戶端交互問題還是服務端數據庫編程問題,其同源原因就是在設計和實現過程中出現的業務邏輯混淆,以及與外部實體之間的交互關系。我們要關注的非對稱性不是應用的"左邊"和"右邊",而是它的"內部"和"外部",該屬于"內部"的代碼就不要泄露到"外部"去,其基礎理論還是那些基本的設計原則。

六邊形架構的核心理念是:應用通過"端口"跟外部進行交互的。"端口"讓人聯想到操作系統的端口,任何符合協議的設備都可以被插到相應的端口上。端口的協議是為了兩個設備之間能夠進行通信而設計的,位于OSI 7層協議模型中的傳輸層。

對應用來說,API就是協議。對于每一個外部設備,都有對應的適配器把API轉換成自己所需要的信號,反之亦然。用戶圖形界面就是一個很好的例子,它是把用戶操作映射到端口API的適配器,還有其它的例子如自動測試套件,批處理驅動器,以及任何需要跨應用程序交互的代碼。

對于應用的數據處理層面,應用通過與外部實體交互得到數據,這里用到的協議一般指數據庫協議。從應用角度來看,把SQL數據庫遷移到普通的文件或者其它類型的數據庫,API仍然保持不變。適應于同一個端口的適配器還包括SQL適配器,文件適配器,以及更重要的數據庫mock,它可以是駐存在內存里的數據庫,不一定是真實的數據庫。

很多應用都只有兩個端口:用戶端端口 和 數據庫端端口。這種情況看起來是對稱的,很自然地就會用單維度多層次的架構來構建它。在開發應用程序時,就是我們經常看到的三層、四層或五層架構。這種架構有兩個問題:

  1. 很容易跨越層間的邊界,把業務邏輯滲透到其它層中去。
  2. 有的應用可能不止需要兩個端口,所以不能用單維度架構來構建。

這就是六邊形架構提出的原因,它著重解決對稱性問題,應用通過端口與外部進行交互,而外部的實體也可以用同樣的方式來處理。六邊形架構強調以下兩點:

首先,通過"內外"的不對稱性以及端口的特點,擺脫單維度多層次架構的束縛。可以定義不同數量的端口,2個,3個或者4個,這里說的六邊形不限于只有六個邊, 可以根據需要加入更多的端口和適配器,"六邊形架構"只是視覺上的一種叫法。

其次,關注整體架構的結果導向,一個端口對應一個或一組有目的交互行為。但一個端口一般會有多個適配器,可以是無人應答機,語音留言機,按鍵電話,用戶圖形界面,測試套件,批處理驅動器,HTTP接口,程序之間的接口,mock的數據庫,或者真實的數據庫。

從應用層面來看,這一架構的目的是將注意力聚焦在內外非對稱性上,讓外部的實體從應用視角來看都是一樣的。

結構

六邊形架構

一個典型的六邊形架構應用有兩個端口,每個端口對應幾個適配器,這兩個端口分別用于應用控制和數據獲取。該應用可以被自動化測試,系統層面的回歸測試,用戶交互操作,遠程HTTP調用或者另外一個本地應用驅動。在數據方面,通過配置使用外部的數據庫,可以是Oracle數據庫,mock的數據庫,測試數據庫或生產數據庫,從而實現應用和外部數據庫的解耦。應用的功能說明是依據六邊形內部的接口來編寫的,而不是依據外部可能用到的任何一種技術。

三層架構

對于一個典型的三層架構而言,簡化起見,每個端口只給出兩個適配器。架構的頂層跟底層可以適用多個適配器,這些適配器是可以按照一定順序來開發。帶有數字的箭頭展示了一個團隊是如何按照一定順序來開發和使用應用的:

  1. 用測試套件(如FIT)來驅動應用,用mock的內存數據庫模擬真實數據庫。
  2. 給應用增加GUI,但仍然使用mock數據庫。
  3. 在集成測試的時候使用自動化測試腳本(例如,通過Cruise Control觸發),數據庫換成包含測試數據的真實數據庫。
  4. 用戶在生產環境使用應用,數據庫也是真實的。

代碼示例

FIT的文檔給出了一個簡單的例子來說明端口與適配器模式,它是一個計算折扣價格的應用:discount(amount) = amount * rate(amount);

在這個應用里,amount來自用戶的輸入,而rate來自數據庫,所以需要兩個端口。先用測試代碼跟rate常量來測試,然后再使用GUI跟mock數據庫,來自IHC的Gyan Sharma提供這個示例的代碼,具體參考原文。

另一個用Ruby和Rack實現的例子可以看這里https://github.com/totheralistair/SmallerWebHexagon。

六邊形架構中的左右非對稱性

六邊形架構強調端口之間的相似性。在實現的時候一般有兩種風格,稱之為"主"和"從",或者叫驅動者跟被驅動者,實際上是CS結構的又一體現。

在上面的例子中,FIT被用在左邊的端口上,而mock的東西在右邊。在三層架構中,FIT在最頂層,mock在***層。這兩者之間的區別在于是誰觸發了會話,或者誰在會話中起主導作用。FIT就是"主",這個框架就是被設計用來通過腳本來驅動應用的。Mock數據庫就是"從",數據庫被設計用來響應來自應用的查詢或記錄變更事件的。

根據系統用例,把"主"的端口和適配器放在了六邊形的左邊,而"從"的端口和適配器放在了六邊形的右邊。它們之間的關系以及它們的實現方式是很有用的,但前提是要用在六邊形架構中。端口與適配器模式***的好處就是可以讓應用可以完全獨立地運行。

六邊形架構的應用邊界

六邊形架構對用例編寫也有強化作用。開發者在編寫用例時常犯的錯誤是把端口外邊的技術細節包含在用例里,這樣的用例易讀性差,乏味,脆弱,難于維護。使用六邊形架構后,編寫用例應該以應用的邊界為準。用例要明確應用能夠支持的功能和事件,而不用關心外部的技術是怎么樣的。

如何使用端口取決于個人經驗。一種極端的情況,每個用例都被賦予一個端口,這樣應用里就會有成百上千的端口。另一種情況是,把左右兩邊的端口分別合并起來,這樣就只剩兩個端口了。這兩種情況都不是最理想的。一些大家所熟知的應用是這樣的:

  • 天氣預報系統有四個端口:天氣預報源,管理員,訂閱者,訂閱者數據庫。
  • 咖啡機控制器有四個端口:用戶,包含菜單和價格的數據庫,調配師,硬幣盒。
  • 醫藥系統有三個端口:護士,處方數據庫,藥劑師。

這些實例沒有拘泥于端口的數量,一切都是為了業務系統服務的。一般傾向于選擇更少的端口,實際上是另一種對分層模型的界定。

分層模型

原文中談到的一個真實應用是這樣的,報警系統從國家天氣服務中心獲取地震,龍卷風,火災和洪水的預警,然后通過電話或語音留言通知人們。如果遵循技術與業務目標相關聯的原則,可以設計成一個接口用于接收來自預報源的數據,一個用來向語言留言機發送通知,一個GUI管理界面,以及一個獲取訂閱者數據的數據庫接口。當希望向系統里增加一些接口的時候,比如一個來自天氣服務中心的http接口,或者一個到訂閱者的郵件接口,還要考慮怎么讓應用套件滿足客戶定制化需求。這樣就會會陷入維護和測試的惡夢,因為要為不同的定制需求開發不同的版本。

經過系統接口設計的調整,新的六邊形架構面向的是業務目標,而不是具體的技術,而且把所有的具體技術換成了適配器。這樣,很快就把http和郵件接口加入到了系統中,把應用部署成"headless"模式,并添加了一個適配器,可以按需通過API調用連接到其他應用上。***,因為應用的獨立運行能力和各種適配器的存在,就可以使用單獨的自動化腳本進行回歸測試了。

一句話體會

六邊形架構的初衷是為了解決技術與業務系統的解耦合問題,以及技術與技術間的解耦合問題,這一架構從設計模式中來,從業務的實體服務出發,將面向接口的設計具體化的端口協議和適配器實現,將業務實體實現自服務的完備性,可以看作是微服務的一個理論基礎吧。

【本文來自51CTO專欄作者老曹的原創文章,作者微信公眾號:喔家ArchiSelf,id:wrieless-com】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2023-08-06 23:31:36

架構系統RPC

2020-04-02 13:44:57

架構Netflix數據

2019-12-16 08:08:39

六邊形架構分層架構架構

2023-04-14 08:00:00

架構測試開發

2023-12-13 10:06:28

六邊形架構系統測試

2022-12-28 07:48:40

六邊形動畫CSS

2021-08-29 18:32:18

CSS

2023-11-01 07:41:39

六邊形架構適配器架構

2024-04-17 08:06:41

六邊形洋蔥架構領域

2023-10-30 10:12:20

2025-02-24 07:39:53

2025-01-17 11:38:10

2017-06-08 10:33:42

軟件開發前后端架構

2023-09-08 18:37:34

HarmonyOS

2022-11-08 08:00:00

開發Uber數據庫

2025-09-05 09:07:00

2025-07-30 09:05:00

AI模型訓練
點贊
收藏

51CTO技術棧公眾號

欧美极品在线视频| 欧美日韩国产精品一区二区不卡中文| 国产精品人人做人人爽| 美国黑人一级大黄| 2018av在线| 97久久精品人人做人人爽50路| 97成人精品区在线播放| 男女做爰猛烈刺激| 成人福利一区二区| 一区二区三区中文免费| 国产一区二区在线观看免费播放| 黄色一级片免费在线观看| 国产精品美女久久久久久不卡| 色av一区二区| 一二三在线视频| 熟妇人妻中文av无码| 久久久www| 美乳少妇欧美精品| 泷泽萝拉在线播放| 欧美成人家庭影院| 性久久久久久久| 神马影院午夜我不卡影院| av在线资源观看| 麻豆9191精品国产| 美女久久久久久久久久久| 黑人玩弄人妻一区二区三区| 日韩免费va| 亚洲精品久久久蜜桃| 欧美性天天影院| 性生活视频软件| 日韩二区三区四区| 久久久久久久久久久免费 | 激情综合网av| 97精品免费视频| 欧美做爰爽爽爽爽爽爽| 欧美亚洲国产日韩| 欧美一卡2卡三卡4卡5免费| 成人观看免费完整观看| 日本无删减在线| 国产精品美女视频| 久久精品日韩精品| 99riav国产| 男男视频亚洲欧美| 18久久久久久| 日本一级淫片免费放| 色呦哟—国产精品| 国产亚洲美女久久| 人妻无码一区二区三区| 亚洲网一区二区三区| 欧美日韩成人一区二区| 国内外成人免费激情视频| 四虎亚洲精品| 国产精品私人影院| 色播五月综合| 久久精品a一级国产免视看成人 | 欧美黄色小说| 99国内精品久久| 国产一区二区三区四区hd| 国产精品女人久久久| 日本不卡视频一二三区| 午夜精品久久久久久久99热浪潮 | 欧洲成人免费视频| 国产无码精品一区二区| 欧美三级乱码| 国外成人在线播放| 国产一级av毛片| 99av国产精品欲麻豆| 欧美精品久久久久久久久久| 青娱乐国产盛宴| 在线中文一区| 欧美激情欧美激情| 国产精品不卡av| 亚洲欧洲日本mm| 7m第一福利500精品视频| 国产污视频在线观看| 在线观看视频日韩| 午夜精品蜜臀一区二区三区免费| 久久黄色免费网站| 红桃视频欧美| 7777精品视频| 波多野结衣激情视频| 日本视频在线一区| 国产欧美日韩91| 日韩久久久久久久久久| 麻豆91小视频| 99久久伊人精品影院| 国产 日韩 欧美 精品| 成人免费看黄yyy456| 精品蜜桃一区二区三区| 青青草观看免费视频在线| 久久久久9999亚洲精品| 日韩av电影免费在线观看| 97超碰人人在线| 亚洲欧美激情插| 97超碰在线人人| 伊人久久精品一区二区三区| 欧美亚一区二区| 天天摸天天舔天天操| 日韩一级淫片| 精品久久久久久久久久久院品网| 少妇搡bbbb搡bbb搡打电话| 欧美电影完整版在线观看| 国产亚洲一区二区在线| 欧美日韩一级大片| 国产精品综合色区在线观看| 国产剧情日韩欧美| 国产精品国产av| 成人精品gif动图一区| 国产高清一区二区三区| 国产最新视频在线观看| 亚洲人成7777| 18禁免费无码无遮挡不卡网站| 欧美性xxx| 日韩一区二区三区高清免费看看| 中文在线永久免费观看| 婷婷激情综合| 欧美亚洲激情视频| 91无套直看片红桃| 99re视频精品| 男同互操gay射视频在线看| 日本欧美电影在线观看| 欧美中文字幕一区二区三区亚洲| 男插女视频网站| 视频一区中文| 欧美国产精品va在线观看| 久久人人爽人人爽人人片av免费| 懂色av中文一区二区三区| 先锋影音日韩| 国产美女一区视频| 欧美日本免费一区二区三区| www.超碰97| 欧美日韩三级电影在线| 国产精品天天狠天天看| 日本免费网站在线观看| 国产精品久久久久精k8| 俄罗斯av网站| 亚洲午夜免费| 久久久国产成人精品| 日韩综合在线观看| 不卡一二三区首页| 亚洲av综合色区| 韩国精品视频在线观看| 日韩精品在线观看一区二区| 私库av在线播放| 麻豆精品新av中文字幕| 久久综合中文色婷婷| 成人黄色在线电影| 日韩欧美在线字幕| 国产又粗又猛又色| 欧美午夜在线视频| 亚洲一区久久久| 777电影在线观看| 在线视频国产一区| 国产中年熟女高潮大集合| 在线精品亚洲| 国产精品裸体一区二区三区| 国产人成网在线播放va免费| 欧美日韩精品欧美日韩精品一综合| 全黄一级裸体片| 在线精品亚洲| 久久av免费一区| www成人免费观看| 亚洲精品二三区| 日韩久久精品视频| 91麻豆高清视频| 亚洲色欲综合一区二区三区| 女人抽搐喷水高潮国产精品| 午夜精品久久久久久久99热浪潮 | 欧美日韩亚洲综合一区二区三区激情在线 | 精品中文字幕人| 日本午夜大片a在线观看| 亚洲第一区在线| 亚洲日本韩国在线| 91小视频在线观看| 黄色片久久久久| 日本道不卡免费一区| 国产精品久久久久99| aⅴ在线视频男人的天堂| 欧美日韩精品免费| 久久国产高清视频| 国产精品1区2区3区在线观看| 中文字幕在线中文| 日本高清精品| 97人人模人人爽人人喊中文字 | 亚洲美女免费精品视频在线观看| 国产精品乱码一区二区视频| 国产欧美久久久精品影院| 国产精品入口免费软件| 91综合久久| 成人精品水蜜桃| 亚洲永久av| 亚洲第一av网| 亚洲精品毛片一区二区三区| 18欧美亚洲精品| 稀缺小u女呦精品呦| 麻豆成人精品| 欧美一级特黄aaaaaa在线看片| 97久久综合精品久久久综合| 欧美激情视频网| 日韩av资源站| 欧美日本国产视频| 久久久久久av无码免费网站| 99免费精品在线观看| mm1313亚洲国产精品无码试看| 欧美激情偷拍自拍| 国产一区精品在线| 国产精品99久久久久久董美香| 久久精品视频va| 无码国产精品高潮久久99| 懂色aⅴ精品一区二区三区蜜月| 久久久视频6r| 丁香网亚洲国际| 欧美大尺度做爰床戏| 黄色工厂这里只有精品| 欧美系列一区| 9l亚洲国产成人精品一区二三| 日韩av日韩在线观看| 成人免费网址| 国产亚洲xxx| av中文字幕免费在线观看| 欧美午夜无遮挡| 欧美色图亚洲天堂| 国产精品午夜春色av| 免费看毛片的网站| 久久精品久久综合| 欧美亚洲一二三区| 欧美激情视频一区二区三区免费| 狼狼综合久久久久综合网| 91成人抖音| 4388成人网| 少女频道在线观看高清 | 麻豆网站在线| 亚洲丝袜在线视频| 污视频在线免费观看| 91麻豆精品91久久久久同性| 免费在线观看黄网站| 亚洲狼人国产精品| 日本少妇色视频| 成人v精品蜜桃久久一区| 8x8x成人免费视频| 男男成人高潮片免费网站| 成人黄色片视频| 最新亚洲一区| 全黄性性激高免费视频| 一个色综合网| 在线国产精品网| 九九热爱视频精品视频| 韩国一区二区三区美女美女秀| 国产精品久久久久久久久久辛辛| 国产精品成人播放| 性感美女一区二区在线观看| 国产91精品久久久久久| 国产污视频在线播放| 欧美国产中文字幕| av免费在线网站| 大胆欧美人体视频| aaa在线免费观看| 日韩性生活视频| 97视频在线观看网站| 色哟哟入口国产精品| 北条麻妃在线| 深夜福利亚洲导航| 亚洲s色大片| 在线视频亚洲欧美| 日韩伦理在线观看| 日韩在线视频免费观看| av在线电影免费观看| 亚洲天堂色网站| av午夜在线| 国产一区二区欧美日韩| 久久精品蜜桃| 日韩在线欧美在线| 怡红院在线观看| 久久久久一本一区二区青青蜜月| caoprom在线| 欧美在线中文字幕| 激情亚洲影院在线观看| 国产免费一区视频观看免费| 中文字幕日本一区| 成人自拍偷拍| 麻豆成人入口| 日韩久久久久久久| 国产在线观看91一区二区三区| 色乱码一区二区三在线看| 久久视频国产| 日本a级片在线播放| 久久久999| 成人做爰69片免费| 国产亚洲自拍一区| 久久网免费视频| 欧美日韩中文字幕一区| 三级网站免费观看| 色妞在线综合亚洲欧美| 亚洲美女尤物影院| 亚洲a在线观看| 精品视频97| 婷婷五月综合缴情在线视频| 美国欧美日韩国产在线播放| 日韩aaaaa| 亚洲精品日产精品乱码不卡| 免费污污视频在线观看| 精品久久久久久久久久久久久久久久久 | 影音先锋亚洲天堂| 欧美一区二区私人影院日本| 黄色免费在线播放| 久久久久久国产免费| 国产精品蜜月aⅴ在线| 麻豆蜜桃91| 99精品国产在热久久婷婷| 一二三av在线| 中文字幕av一区二区三区| 国产一级久久久| 欧美一级在线观看| av网站在线播放| 日韩暖暖在线视频| 红杏一区二区三区| wwwwww欧美| 狠狠色2019综合网| 少妇视频在线播放| 一本大道av一区二区在线播放| 俄罗斯嫩小性bbwbbw| 久久婷婷国产麻豆91天堂| 韩国成人在线| 色一情一乱一伦一区二区三区| 亚洲尤物在线| 色婷婷精品久久二区二区密| 一区二区久久久久| a在线观看免费| 久久综合色影院| avtt久久| 国产又大又长又粗又黄| 经典一区二区三区| 一区二区三区在线播放视频| 91福利资源站| 东凛在线观看| 国产精品一区二区三区久久| 国产成人精品一区二区免费看京| 日本国产在线播放| 99精品视频在线观看| 日韩精品手机在线| 亚洲丁香婷深爱综合| 538在线精品| 国产一区二区不卡视频在线观看| 亚洲国产激情| 女尊高h男高潮呻吟| 狠狠躁天天躁日日躁欧美| 天堂av在线免费观看| 日韩美女免费视频| 精品久久一区| 亚洲欧美aaa| 亚洲精品日产精品乱码不卡| 成人久久精品人妻一区二区三区| 欧美精品999| 加勒比久久高清| 波多野结衣家庭教师视频| 久久久久久一二三区| 中文在线免费观看| 久久中文字幕在线视频| 亚洲国产中文在线| 成人免费aaa| 久久精品一区二区三区四区| 中文字幕日韩三级| 久久五月天色综合| 超碰精品在线观看| 黑鬼大战白妞高潮喷白浆| 欧美国产精品一区二区| 国产精品久久久久久久一区二区| 欧美国产日韩一区| 视频国产一区| 亚洲成人手机在线观看| 亚洲午夜激情网页| 极品白浆推特女神在线观看| 国产精品亚发布| 欧美午夜a级限制福利片| 日本黄色录像片| 欧美性感一类影片在线播放| 成人在线app| 久中文字幕一区| 黄色日韩网站视频| 免费看日韩毛片| 日韩在线观看免费全| 国产精品一线| 免费一区二区三区在线观看| 樱桃国产成人精品视频| 四虎精品在永久在线观看| 国产一区香蕉久久| 一本久道久久综合狠狠爱| 婷婷丁香综合网| 亚洲国产精品久久精品怡红院| 影视一区二区三区| 久久亚洲国产成人精品无码区| 久久人人超碰精品| 亚洲爆乳无码一区二区三区| 日本乱人伦a精品| 欧美在线91| 在线免费观看视频| 亚洲国产精品嫩草影院久久| 国产综合色激情| 免费在线观看毛片网站| 一区二区三区中文免费|