成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

強烈建議在項目中使用四層架構模型

開發 架構
用戶接口層將應用層的服務按照一定協議對外暴露。用戶接口層接收用戶請求,并將請求的參數經過處理后,傳遞給應用層進行處理,最后將應用層的處理結果按照一定的協議向調用 者返回。

經典的四層架構將軟件系統分為四個層次,每個層次都有不同的職責和功能。經典的四層 架構如圖1所示。

圖1 經典的四層架構圖1 經典的四層架構

1.? 用戶接口(User Interface)層

用戶接口層將應用層的服務按照一定協議對外暴露。用戶接口層接收用戶請求,并將請求的參數經過處理后,傳遞給應用層進行處理,最后將應用層的處理結果按照一定的協議向調用 者返回。

用戶接口層是應用的最上層,通常表現為 Controller 接口、RPC 服務提供者的實現類、定 時任務、消息隊列的監聽器等。

用戶接口層不應包含任何業務處理邏輯,僅用于暴露應用層服務。用戶接口層的代碼應該非常簡單。

2.? 應用(Application)層

應用層協調領域模型和基礎設施層完成業務操作。應用層自身不包含業務邏輯處理的代 碼,它收到來自用戶接口層的請求后,通過基礎設施層加載領域模型(聚合根),再由領域模 型完成業務操作,最后由基礎設施層持久化領域模型。

應用層的代碼也應該是簡單的,僅用于編排基礎設施和領域模型的執行過程,既不涉及業務操作,也不涉及基礎設施的技術實現。

3.? 領域(Domain)層

領域層是對業務進行領域建模的結果,包含所有的領域模型,如實體、值對象、領域服務等。

所有的業務概念、業務規則、業務流程都應在領域層中表達。

領域層不包括任何技術細節,相關的倉儲、工廠、網關等基礎設施應先在領域層進行定義,然后交給基礎設施層或者應用層進行實現。

4.? 基礎設施(Infrastructure)層

基礎設施層負責實現領域層定義的基礎設施接口,例如,加載和保存聚合根的倉儲 (Repository)接口、調用外部服務的網關(Gateway)接口、發布領域事件到消息中間件的消 息發布(Publisher)接口等。基礎設施層實現這些接口后,供應用層調用。

基礎設施層僅包含技術實現細節,不包含任何業務處理邏輯。基礎設施層接口的輸入和輸 出應該是領域模型或基礎數據類型。

端口和適配器架構

端口和適配器架構(Ports and Adapters Architecture)又被稱為六邊形架構(Hexagonal Architecture),其核心思想是將業務邏輯從技術細節中解耦,使業務邏輯能夠獨立于任何特定的技術實現。

端口和適配器架構通過引入兩個關鍵概念來達到這個目標:端口(Port)和適配 器(Adapter)。 

端口是系統與外部進行交互的接口,它定義了系統對外提供的服務以及需要外部提供的支持。

“定義系統對外提供的服務”通常是指定義可以被外部系統調用的接口,將業務邏輯實現在接 口的實現類中,這種端口屬于入站端口(Inbound Port)。

“定義需要外部提供的支持”,是指執行業務邏輯的過程中,有時候需要依賴外部服務(例如從外部服務加載某些數據以用于完成計算),此時定義一個接口,通過調用該接口完成外部調用,這種端口屬于出站端口(Outbound Port)。 

適配器則細分為主動適配器(Driving Adapter)和被動適配器(Driven Adapter)兩種。主 動適配器用于對外暴露端口,例如將端口暴露為 RESTful 接口,或者將端口暴露為 RPC 服務;被動適配器用于實現業務邏輯執行過程中需要使用的端口,如外部調用網關等。

六邊形架構如圖2所示。

圖2 六邊形架構圖2 六邊形架構

端口和適配器之間的交互關系如圖 2-4 所示。

圖3 端口和適配器之間的交互關系圖3 端口和適配器之間的交互關系

主動適配器偽代碼如下。

/**  
* 主動適配器 , 將創建文章的 Port 暴露為 HTTP 服務  
*/ 
@RestController 
public class ArticleController {
@Resource  
private ArticleService service; 
@RequestMapping("/create")  
public void create(DTO dto) {
  service.create(dto);
  } 
}

進站端口偽代碼如下。

public interface ArticleService {
  /**
  * 端口和適配器架構中的 Port, 提供創建文章的能力
  * 這是一個進站端口
  * @param dto
  */
  void create(DTO dto); 
}

出站端口偽代碼如下。 

public interface AuthorServiceGateway {
  /**
  * 端口和適配器架構中的 Port, 查詢作者信息
  * 這是一個出站端口
  * @param authorId
  * @return
  */
  AuthorDto queryAuthor(String authorId);
 }

被動適配器偽代碼如下。

/**
 * 被動適配器
 */
public interface AuthorServiceGatewayImpl implements AuthorServiceGateway {
  /**
  * 作家 RPC 服務
 */
@Resource
private AuthorServiceRpc rpc;
AuthorDto queryAuthor(String authorId) { 
// 拼裝報文
 AuthorRequest req = this.createRequest(authorId); 
// 執行 RPC 查詢
AuthorResponse res = rpc.queryAuthor(); 
// 解析查詢結果并返回
return this.handleAuthorResponse(res);
  }
 }
責任編輯:武曉燕 來源: JAVA日知錄
相關推薦

2024-08-19 01:10:00

RedisGo代碼

2023-05-25 19:23:29

2021-03-02 07:13:54

Java8版本升級

2021-01-13 07:01:51

Adobe Flash Flash Playe

2011-08-25 09:17:24

庫克喬布斯蘋果

2021-09-27 10:52:06

React工具庫開發

2021-11-05 07:47:55

API計算任務

2021-01-05 05:36:08

Windows10操作系統Flash

2024-07-11 16:25:44

2018-12-04 15:50:03

轉行Python爬蟲

2009-06-24 17:34:58

使用JSF的經驗

2015-08-03 11:45:37

storyboard

2023-11-30 09:00:00

TypeScript開發

2018-08-21 09:00:30

Linuxtop命令

2021-08-27 06:55:37

數據數據分析大數據

2017-07-04 19:02:17

ReacRedux 項目

2024-09-10 09:05:12

SpringREST并發

2023-05-15 08:32:45

2021-04-16 23:23:05

工具macOS系統

2021-08-23 10:40:30

人工智能KubernetesAI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄在线免费观看 | 国产超碰人人爽人人做人人爱 | 欧美国产日韩在线观看 | 欧美九九九 | 日本a视频 | 美女亚洲一区 | 中文字幕免费 | 一本一道久久a久久精品蜜桃 | 中文字幕在线视频观看 | 免费视频成人国产精品网站 | 日韩一及片 | 国产91黄色 | 久久久爽爽爽美女图片 | 国产精品呻吟久久av凹凸 | 国产一二三视频在线观看 | 精品国产女人 | 成人精品一区 | 中文字幕日韩一区 | 久久久久久国产精品久久 | 中文字幕第49页 | 中文字幕蜜臀 | 国产三级一区二区三区 | 午夜色播 | 国产一区二区三区在线视频 | 国产精品久久久久久一级毛片 | 欧美三区视频 | 国产999精品久久久 午夜天堂精品久久久久 | 中文字幕在线第一页 | 久久精品欧美视频 | 久久小视频 | 国产九九九九 | 激情三区 | h视频在线免费看 | 我爱操 | 中文字幕三区 | 91精品一区二区三区久久久久久 | 久久综合爱 | 美女在线视频一区二区三区 | 久久中文字幕一区 | 91精品国产91久久综合桃花 | 久久网一区二区三区 |