溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2021-08-30 17:33:21 來源:億速云 閱讀:135 作者:chen 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“如何使用Golang構(gòu)建整潔架構(gòu)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

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

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

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

  • 獨(dú)立的框架。該體系結(jié)構(gòu)并不依賴于某些帶有特性的軟件庫的存在。這允許您使用這些框架作為工具,而不是將您的系統(tǒng)束縛在有限的約束中。

  • 可測(cè)試的。業(yè)務(wù)規(guī)則可以在沒有 UI、數(shù)據(jù)庫、Web 服務(wù)器或任何其他外部元素的情況下進(jìn)行測(cè)試。

  • 獨(dú)立的 UI 。UI 可以很容易地更改,而不會(huì)改變系統(tǒng)的其他部分。例如,可以用控制臺(tái) UI 替換 Web UI,而不需要更改業(yè)務(wù)規(guī)則。

  • 獨(dú)立的數(shù)據(jù)庫。您可以將 Oracle 或 SQL Server 替換為 Mongo、BigTable、CouchDB  或其他數(shù)據(jù)庫。您的業(yè)務(wù)規(guī)則不綁定到數(shù)據(jù)庫。

  • 獨(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ù)庫或 Web。

  • 框架和驅(qū)動(dòng)程序: 這個(gè)層通常由框架和工具(如數(shù)據(jù)庫、Web 框架等)組成。

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

讓我們以 user 包為例:

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

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

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

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

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

該接口可以在任何類型的存儲(chǔ)層中實(shí)現(xiàn),如 MongoDB、MySQL 等。在我們的例子中,我們使用 MongoDB 來實(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ù)庫從 MongoDB 更改為 Neo4j  ,而不會(huì)破壞應(yīng)用程序的其他部分。這樣,我們可以在不損失質(zhì)量和速度的情況下開發(fā)我們的軟件。

“如何使用Golang構(gòu)建整潔架構(gòu)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI