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

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

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

01 介紹

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

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

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

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

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

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

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

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

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

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

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

Delivery 層,負(fù)責(zé)將處理后的數(shù)據(jù)展示出來(lái),可以采用 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 層之外,其它層之間通過(guò)接口通信,例如 Usecase 層與 Repository 層之間通信,Repository 層定義接口,并實(shí)現(xiàn)接口中的所有方法。Usecase 層通過(guò)接口與 Repository 層通信。

示例代碼:

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

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

示例代碼:

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

04  總結(jié)

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

完整代碼,請(qǐng)查閱 github。

責(zé)任編輯:張燕妮 來(lái)源: Golang語(yǔ)言開(kāi)發(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語(yǔ)言

2021-03-19 07:23:23

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

2025-06-27 06:38:19

2022-09-14 09:27:49

CSS架構(gòu)代碼

2021-12-24 09:00:43

Go語(yǔ)言進(jìn)程

2023-09-21 22:02:22

Go語(yǔ)言高級(jí)特性

2019-10-11 10:44:30

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

2021-06-09 08:09:05

架構(gòu)軟件整潔

2014-09-01 09:57:11

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

2023-08-17 10:12:04

前端整潔架構(gòu)

2025-03-17 01:55:00

TCP服務(wù)迭代

2018-03-12 22:13:46

GO語(yǔ)言編程軟件

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語(yǔ)言架構(gòu)

2017-09-07 15:53:51

Go支付Java

2025-02-20 08:21:36

2012-08-01 09:38:17

代碼整潔
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 精品欧美二区 | 国产精品国产三级国产aⅴ中文 | 羞羞网站免费 | 色综合99| 国内av在线 | 日本中文字幕一区 | 亚洲精品乱码久久久久久按摩观 | 亚洲国产一区二区三区在线观看 | 国产成人综合亚洲欧美94在线 | 精品国产乱码久久久久久88av | 超碰av在线 | 99视频免费播放 | 久久国产精品视频 | 亚洲日日 | 一级黄色影片在线观看 | 日韩精品一区在线 | 亚洲欧美日韩在线不卡 | 中文字幕爱爱视频 | 91高清免费观看 | 精品欧美一区二区三区免费观看 | 免费看啪啪网站 | 亚洲一区二区三区免费在线 | 欧美久久久久久久 | 日韩中文字幕在线播放 | 久久精品视频91 | 国产欧美精品一区二区 | 亚洲视频免费播放 | 国产精品国产三级国产aⅴ无密码 | 国产片网站 | 国产乱码精品一区二区三区五月婷 | 99热国产免费| 自拍第一页 | 免费观看的av毛片的网站 | 日本在线看片 | 日韩久久久久久 | 国产视频二区 | 国产精品亚洲精品日韩已方 | 99re热精品视频国产免费 | 成人免费网站 | 97超碰成人 | 精品国产高清一区二区三区 |