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

使用 Golang 構(gòu)建整潔架構(gòu)

開(kāi)發(fā) 架構(gòu)
在《Clean Architecture: A Craftsman’s Guide to Software Structure and Design》一書(shū)中,著名作家 Robert “Uncle Bob” Martin 提出了一種具有一些重要特性的體系結(jié)構(gòu),如框架、數(shù)據(jù)庫(kù)和接口的可測(cè)試性和獨(dú)立性。

 什么是整潔架構(gòu)?

在《Clean Architecture: A Craftsman’s Guide to Software Structure and Design》一書(shū)中,著名作家 Robert “Uncle Bob” Martin 提出了一種具有一些重要特性的體系結(jié)構(gòu),如框架、數(shù)據(jù)庫(kù)和接口的可測(cè)試性和獨(dú)立性。

[[278793]]

整潔架構(gòu)的約束條件是:

  • 獨(dú)立的框架。該體系結(jié)構(gòu)并不依賴(lài)于某些帶有特性的軟件庫(kù)的存在。這允許您使用這些框架作為工具,而不是將您的系統(tǒng)束縛在有限的約束中。
  • 可測(cè)試的。業(yè)務(wù)規(guī)則可以在沒(méi)有 UI、數(shù)據(jù)庫(kù)、Web 服務(wù)器或任何其他外部元素的情況下進(jìn)行測(cè)試。
  • 獨(dú)立的 UI 。UI 可以很容易地更改,而不會(huì)改變系統(tǒng)的其他部分。例如,可以用控制臺(tái) UI 替換 Web UI,而不需要更改業(yè)務(wù)規(guī)則。
  • 獨(dú)立的數(shù)據(jù)庫(kù)。您可以將 Oracle 或 SQL Server 替換為 Mongo、BigTable、CouchDB 或其他數(shù)據(jù)庫(kù)。您的業(yè)務(wù)規(guī)則不綁定到數(shù)據(jù)庫(kù)。
  • 獨(dú)立的任意外部代理。事實(shí)上,你的業(yè)務(wù)規(guī)則根本就不用了解外部的構(gòu)成。

了解更多請(qǐng)查看 : https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html

因此,基于這些約束,每一層都必須是獨(dú)立的和可測(cè)試的。

從 Uncle Bob 的架構(gòu)中,我們可以將代碼分成 4 層:

  • 實(shí)體: 封裝企業(yè)范圍的業(yè)務(wù)規(guī)則。Go 中的實(shí)體是一組數(shù)據(jù)結(jié)構(gòu)和函數(shù)。
  • 用例: 這個(gè)層中的軟件包含應(yīng)用程序特定的業(yè)務(wù)規(guī)則。它封裝并實(shí)現(xiàn)了系統(tǒng)的所有用例。
  • 控制器: 該層中的軟件是一組適配器,它將數(shù)據(jù)從最方便的用例和實(shí)體轉(zhuǎn)換為最方便的外部代理,例如數(shù)據(jù)庫(kù)或 Web。
  • 框架和驅(qū)動(dòng)程序: 這個(gè)層通常由框架和工具(如數(shù)據(jù)庫(kù)、Web 框架等)組成。

使用 Golang 構(gòu)建整潔架構(gòu)

讓我們以 user 包為例:

使用 Golang 構(gòu)建整潔架構(gòu)

在 entity.go 文件中,我們有自己的實(shí)體 :

使用 Golang 構(gòu)建整潔架構(gòu)

在 repository.go 文件中我們定義存儲(chǔ)庫(kù)的接口,用于保存存儲(chǔ)實(shí)體。在這種情況下,存儲(chǔ)庫(kù)意味著 Uncle Bob 架構(gòu)中的框架和驅(qū)動(dòng)層。它的內(nèi)容是:

使用 Golang 構(gòu)建整潔架構(gòu)

該接口可以在任何類(lèi)型的存儲(chǔ)層中實(shí)現(xiàn),如 MongoDB、MySQL 等。在我們的例子中,我們使用 MongoDB 來(lái)實(shí)現(xiàn),就像在 mongodb.go 中看到的那樣:

使用 Golang 構(gòu)建整潔架構(gòu)

service.go 文件表示 Uncle Bob 定義的用例層。在文件中,我們有 Service 接口和它的實(shí)現(xiàn)。Service 接口是:

使用 Golang 構(gòu)建整潔架構(gòu)

最后一層,我們架構(gòu)中的 Controller 是在 api 的內(nèi)容中實(shí)現(xiàn)的:

使用 Golang 構(gòu)建整潔架構(gòu)

在以下代碼中,從 api/main.go 中我們可以看看如何使用這些服務(wù):

使用 Golang 構(gòu)建整潔架構(gòu)

現(xiàn)在我們可以輕松地創(chuàng)建包測(cè)試,比如:

使用 Golang 構(gòu)建整潔架構(gòu)

使用整潔的體系結(jié)構(gòu),我們可以將數(shù)據(jù)庫(kù)從 MongoDB 更改為 Neo4j ,而不會(huì)破壞應(yīng)用程序的其他部分。這樣,我們可以在不損失質(zhì)量和速度的情況下開(kāi)發(fā)我們的軟件。

引用

  • https://hackernoon.com/golang-clean-archithecture-efd6d7c43047
  • https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
責(zé)任編輯:華軒 來(lái)源: Go語(yǔ)言中文網(wǎng)
相關(guān)推薦

2023-12-25 09:49:01

Golang架構(gòu)Go-Kit

2025-03-26 03:20:00

2022-09-14 09:27:49

CSS架構(gòu)代碼

2023-10-09 08:20:12

整潔架構(gòu)軟件設(shè)計(jì)原則

2022-04-18 09:41:14

Go架構(gòu)設(shè)計(jì)

2021-06-09 08:09:05

架構(gòu)軟件整潔

2022-08-25 11:38:38

GolangDockerfile

2023-08-17 10:12:04

前端整潔架構(gòu)

2021-12-24 09:00:43

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

2022-08-08 13:24:28

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

2023-03-13 07:40:44

高并發(fā)golang

2023-02-21 09:45:45

Golang應(yīng)用程序

2023-08-08 08:00:00

架構(gòu)Kafka

2025-02-20 08:21:36

2019-05-14 09:31:16

架構(gòu)整潔軟件編程范式

2012-08-01 09:38:17

代碼整潔

2021-03-19 07:23:23

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

2024-03-06 09:11:34

2021-09-06 13:15:16

golang chan技巧語(yǔ)言

2021-08-23 08:30:30

Docker BuildKit 架構(gòu)
點(diǎn)贊
收藏

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