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

Go 語言整潔架構(gòu)實(shí)踐

開發(fā) 架構(gòu)
本文我們介紹整潔架構(gòu)在 Go 語言中的實(shí)踐。

01 介紹

Bob 大叔在他的一篇標(biāo)題為「整潔架構(gòu)」的博客中提及,現(xiàn)在一些流行的系統(tǒng)架構(gòu),都采用軟件分層設(shè)計(jì),都主張以下 5 個(gè)規(guī)則:

  1. 獨(dú)立于框架
  2. 可測試的
  3. 獨(dú)立于用戶界面
  4. 獨(dú)立于數(shù)據(jù)庫
  5. 獨(dú)立于任何外部依賴

Bob 大叔的架構(gòu)設(shè)計(jì)遵循依賴規(guī)則,他畫了一張同心圓的圖,共分為 4 層,同心圓由內(nèi)向外依次為 Entities、Use Cases、Interface Adapters 和 Frameworks and Drivers,該規(guī)則規(guī)定依賴只能是由外向內(nèi),內(nèi)圈不關(guān)心外圈,外圈不要影響內(nèi)圈。

但是,不要認(rèn)為必須是分為這四層,這里描述的四層只是一個(gè)示例,也許你會發(fā)現(xiàn)你的業(yè)務(wù)不僅僅需要這四層,重點(diǎn)是要遵循由外向內(nèi)的依賴規(guī)則。

本文我們介紹整潔架構(gòu)在 Go 語言中的實(shí)踐。

02  整潔架構(gòu)分層設(shè)計(jì)

參照 Bob 大叔的整潔架構(gòu)軟件分層設(shè)計(jì),我們將架構(gòu)分層分為以下 4 層:

  1. Models
  2. Repository
  3. Usecase
  4. Delivery

其中,Models 與 Entities 相同,將在所有層中使用,我們可以將所有對象的結(jié)構(gòu)體和方法,以及其他需要在所有層中使用的變量、常量和函數(shù)放在 Models 層。這也可以避免遇到循環(huán)導(dǎo)入的問題。

Repository 層,我們可以將處理數(shù)據(jù)庫的程序和調(diào)用微服務(wù)的程序放在該層,僅處理數(shù)據(jù)輸入和輸出,不要有其它關(guān)于業(yè)務(wù)邏輯的代碼。該層依賴操作的數(shù)據(jù)庫或調(diào)用的微服務(wù)。

Usecase 層,我們可以將業(yè)務(wù)邏輯代碼放在該層,它負(fù)責(zé)接收表示層的輸入數(shù)據(jù),將數(shù)據(jù)處理之后,調(diào)用 Repository 層,將處理后的數(shù)據(jù)存儲在數(shù)據(jù)庫或傳遞給調(diào)用的微服務(wù)。反之,將數(shù)據(jù)庫中的數(shù)據(jù)或調(diào)用微服務(wù)的返回?cái)?shù)據(jù),處理之后,返回給 Delivery  層。該層依賴 Repository 層。

Delivery 層,負(fù)責(zé)將處理后的數(shù)據(jù)展示出來,可以采用 RESTful、HTML 或 gRPC 等各種形式。同時(shí),它也負(fù)責(zé)接收用戶輸入的數(shù)據(jù),將數(shù)據(jù)傳遞給 Usecase 層。該層依賴 Usecase 層。

實(shí)踐應(yīng)用的目錄:

.
├── app
└── main.go
├── go.mod
├── go.sum
└── todoList
├── delivery
└── http
└── todoList.go
├── models
└── todoList.go
├── repository
└── mysql
└── todoList.go
└── usecase
└── todoList.go

03 分層之間通信

分層之間是怎么通信的,除了 Models 層之外,其它層之間通過接口通信,例如 Usecase 層與 Repository 層之間通信,Repository 層定義接口,并實(shí)現(xiàn)接口中的所有方法。Usecase 層通過接口與 Repository 層通信。

示例代碼:

type TodoListRepository interface {
Create(ctx context.Context, t *Todolist) (err error)
}

同理,Delivery 層與 Usecase 層之間通信,Usecase 層定義接口,并實(shí)現(xiàn)接口中的所有方法。Delivery 層通過接口與 Usecase 層通信。

示例代碼:

type TodoListUsecase interface {
Create(context.Context, *Todolist) (err error)
}

04  總結(jié)

本文我們介紹整潔架構(gòu)的軟件分層設(shè)計(jì),并且通過一個(gè)簡單的 TodoList 項(xiàng)目,在 Go 語言中實(shí)踐「整潔架構(gòu)」的架構(gòu)設(shè)計(jì)。但是,在 Go 語言中實(shí)際上并沒有標(biāo)準(zhǔn)的架構(gòu)設(shè)計(jì),我們可以嘗試構(gòu)建自己的標(biāo)準(zhǔn)。

完整代碼,請查閱 github。

責(zé)任編輯:張燕妮 來源: Golang語言開發(fā)棧
相關(guān)推薦

2023-12-25 09:49:01

Golang架構(gòu)Go-Kit

2025-03-26 03:20:00

2022-10-30 23:13:30

contextGo語言

2021-03-19 07:23:23

Go架構(gòu)Go工程化

2022-09-14 09:27:49

CSS架構(gòu)代碼

2023-09-21 22:02:22

Go語言高級特性

2021-12-24 09:00:43

Go語言進(jìn)程

2019-10-11 10:44:30

Go語言數(shù)據(jù)庫軟件

2021-06-09 08:09:05

架構(gòu)軟件整潔

2014-09-01 09:57:11

Go產(chǎn)品環(huán)境最佳語言

2023-08-17 10:12:04

前端整潔架構(gòu)

2025-03-17 01:55:00

TCP服務(wù)迭代

2018-03-12 22:13:46

GO語言編程軟件

2022-08-08 13:24:28

整潔架構(gòu)架構(gòu)前端

2023-12-13 07:19:01

微服務(wù)架構(gòu)Golang

2024-08-05 10:26:42

Go語言架構(gòu)

2017-09-07 15:53:51

Go支付Java

2025-02-20 08:21:36

2012-08-01 09:38:17

代碼整潔

2022-09-16 07:40:17

CloudWeGo開源Rust
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产资源网 | 日韩亚洲视频在线 | 91精品国产91久久久久久最新 | 精品久久久久一区二区国产 | 丝袜一区二区三区 | av色站 | 精品无码久久久久久国产 | 中文字幕一区二区三区精彩视频 | 亚洲精品亚洲人成人网 | 久久精品亚洲精品国产欧美 | 欧美一区二区在线视频 | 欧美综合视频在线 | 一级欧美| 午夜日韩| 成人在线观看亚洲 | 91不卡| 一区二区成人 | 日韩免费在线观看视频 | 亚洲成人一区二区 | 操久久久| 中文字幕亚洲区 | 午夜视频精品 | aaaaaaa片毛片免费观看 | 欧美一区二区黄 | 国产日韩精品一区二区 | 日韩精品一区二区三区视频播放 | 亚洲综合色视频在线观看 | 极品销魂美女一区二区 | 成人福利影院 | 国产精品久久国产精品久久 | 久久久久久国产 | 妖精视频一区二区三区 | 亚洲精品成人网 | 91偷拍精品一区二区三区 | 精品一区二区久久久久久久网精 | 国产一区在线视频 | 亚洲精品短视频 | 九九亚洲精品 | 国产精品精品3d动漫 | 一级在线免费观看 | 9久久精品 |