清晰架構(Clean Architecture)的Go微服務

来源:https://www.cnblogs.com/code-craftsman/archive/2020/02/17/12320375.html
-Advertisement-
Play Games

我用Go和gRPC創建了一個微服務項目,並試圖找出最好的程式結構,它可以作為我其他項目的模板。我還將程式設計和編程的最佳實踐應用於Go Microservice程式,例如清晰架構(Clean Architecture),依賴註入(Dependency Injection),日誌記錄,錯誤處理等。我有 ...


我用Go和gRPC創建了一個微服務項目,並試圖找出最好的程式結構,它可以作為我其他項目的模板。我還將程式設計和編程的最佳實踐應用於Go Microservice程式,例如清晰架構(Clean Architecture),依賴註入(Dependency Injection),日誌記錄,錯誤處理等。我有Java背景,併發現自己在Java和Go之間掙扎,它們之間的編程理念完全不同。我寫了一系列關於在項目工作中做出的設計決策和取捨的文章。

閱讀這些文章不需要熟悉Go,但如果你有Go基礎絕對會有幫助。如果你不會Go並且無法確定文章中的代碼在做什麼,那麼你需要從這裡Go by Example¹(你不必完成裡面的所有主題,只需要前面幾個)學習一些基本的Go。本系列中的“事務支持”涉及到資料庫,需要Go中的一些資料庫知識,你可以從Go database / sql tutorial獲取它²。如果你對Go Microservice編程感興趣並思考和關心代碼設計,程式結構,編碼風格,日誌記錄,事務管理和依賴註入,那麼這個系列非常適合你。

本系列的側重點?

本系列不是關於如何快速創建程式原型,而是關於如何進行良好的程式設計使之能適應將來的變化。例如,你可能希望將一個服務的部分功能拆分為單獨的微服務,或添加事務支持,或切換到更好的日誌記錄器,但不想更改代碼中的每個日誌記錄語句。運用此項目中的程式設計,在進行上述更改時不會觸及業務邏輯代碼。你甚至很少更改任何現有代碼(容器代碼除外),多數時候只添加新代碼,因此QA工作量大大減少。你可以使用此程式作為下一個微服務應用的基礎框架,省去了從頭開始的麻煩。你唯一需要做的就是熟悉本框架的內部結構。如果你有Spring(Java)背景或來自面向對象的經歷,或者知道清晰架構(Clean Architecture)或SOLID (面向對象設計),那麼這些代碼應該對你很熟悉。

你無需按以下順序閱讀文章。 如果你熟悉清晰架構(Clean Architecture)³或SOLID (面向對象設計)⁴,你可以按任意順序閱讀文章而不會有任何問題。 但我還是建議你至少先讀完第一篇,它將為你提供整個項目的概述,然後你可以選擇後面的任何一篇的文章。

  1. 清晰架構(Clean Architecture)的Go微服務: 程式結構

  2. 清晰架構(Clean Architecture)的Go微服務: 程式設計

  3. 清晰架構(Clean Architecture)的Go微服務: 設計原則

  4. 清晰架構(Clean Architecture)的Go微服務: 編碼風格

  5. 清晰架構(Clean Architecture)的Go微服務: 事物管理

  6. 清晰架構(Clean Architecture)的Go微服務: 日誌管理

  7. 清晰架構(Clean Architecture)的Go微服務: 程式容器(Application Container)

  8. 清晰架構(Clean Architecture)的Go微服務: 依賴註入(Dependency Injection)

源程式:

完整的源程式鏈接 github: https://github.com/jfeng45/servicetmpl

索引:

[1] Go by Example

[2] Go database/sql tutorial

[3][The Clean Code Blog](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)

[4] S.O.L.I.D is for the first five object-oriented design (OOD) principles introduced by Robert C. Martin, popularly known as Uncle Bob and the acronym is introduced later by Michael Feathers


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 先看代碼: let fn1 = function (x) { return x + 10; }; let fn2 = function (x) { return x * 10; }; let fn3 = function (x) { return x / 10; }; console.log(fn3 ...
  • 方法一: if ($("#checkbox-id").get(0).checked) { // do something } 方法二: if($('#checkbox-id').is(':checked')) { // do something } 方法三: if ($('#checkbox-id' ...
  • 通過運算符可以對一個或多個值進行運算,並且一定有運算結果返回 算數運算符 ​ 算數運算符包括相加(+)、相減( )、相乘( )、相除(/)、取模(%)。任何值與字元串相加都會轉換為字元串,做的是字元串連。除了與字元串做加法,當對非 Number 類型的值進行運算時,會將這些值轉換為 Number 再 ...
  • 如何實現下麵這個漸變的邊框效果: 這個問題本身不難,實現的方法也有一些,主要是有一些細節需要註意。 border-image border-image 是 CSS 規範 CSS Backgrounds and Borders Module Level 3 (最新一版的關於 background 和 ...
  • 一、官方文檔:https://element.eleme.cn/#/zh-CN/component/calendar 發現官方並無農曆顯示的介紹 二、1. 自己寫陽曆轉陰曆的方法或引入別人寫好的 JS 文件,如中國農曆(陰陽曆)和西元陽曆即西曆互轉 JavaScript 庫 2. 如果是引入上面的 ...
  • vue框架中props的typescript用法 在vue中使用typescript時,需要引入vue property decorator庫來相容格式。 javascript寫法 typescript寫法 typescript和javascript在用法的區別,主要是需要嚴格規定label_lis ...
  • 1、橋接模式介紹 2、解決問題 3、代碼演示 4、類圖示意 5、好處分析 6、弊端分析 7、最佳實現 8、現已經使用的場景 ...
  • html = '''<html><head><title>The Dormouse's story</title></head><body><p class="title a " name="dromouse"><b>The Dormouse's story</b></p><p class="sto ...
一周排行
    -Advertisement-
    Play Games
  • JWT(JSON Web Token)是一種用於在網路應用之間傳遞信息的開放標準(RFC 7519)。它使用 JSON 對象在安全可靠的方式下傳遞信息,通常用於身份驗證和信息交換。 在Web API中,JWT通常用於對用戶進行身份驗證和授權。當用戶登錄成功後,伺服器會生成一個Token並返回給客戶端 ...
  • 老周在幾個世紀前曾寫過樹莓派相關的 iOT 水文,之所以沒寫 Nano Framework 相關的內容,是因為那時候這貨還不成熟,可玩性不高。不過,這貨現在已經相對完善,老周都把它用在項目上了——第一個是自製的智能插座,這個某寶上50多塊可以買到,搜“esp32 插座”就能找到。一種是 86 型盒子 ...
  • 引言 上一篇我們創建了一個Sample.Api項目和Sample.Repository,並且帶大家熟悉了一下Moq的概念,這一章我們來實戰一下在xUnit項目使用依賴註入。 Xunit.DependencyInjection Xunit.DependencyInjection 是一個用於 xUnit ...
  • 在 Avalonia 中,樣式是定義控制項外觀的一種方式,而控制項主題則是一組樣式和資源,用於定義應用程式的整體外觀和感覺。本文將深入探討這些概念,並提供示例代碼以幫助您更好地理解它們。 樣式是什麼? 樣式是一組屬性,用於定義控制項的外觀。它們可以包括背景色、邊框、字體樣式等。在 Avalonia 中,樣 ...
  • 在處理大型Excel工作簿時,有時候我們需要在工作表中凍結窗格,這樣可以在滾動查看數據的同時保持某些行或列固定不動。凍結窗格可以幫助我們更容易地導航和理解複雜的數據集。相反,當你不需要凍結窗格時,你可能需要解凍它們以獲得完整的視野。 下麵將介紹如何使用免費.NET庫通過C#實現凍結Excel視窗以鎖 ...
  • .NET 部署 IIS 的簡單步驟一: 下載 dotnet-hosting-x.y.z-win.exe ,下載地址:.NET Downloads (Linux, macOS, and Windows) (microsoft.com) .NET 部署 IIS 的簡單步驟二: 選擇對應的版本,點擊進入詳 ...
  • 拓展閱讀 資料庫設計工具-08-概覽 資料庫設計工具-08-powerdesigner 資料庫設計工具-09-mysql workbench 資料庫設計工具-10-dbdesign 資料庫設計工具-11-dbeaver 資料庫設計工具-12-pgmodeler 資料庫設計工具-13-erdplus ...
  • 初識STL STL,(Standard Template Library),即"標準模板庫",由惠普實驗室開發,STL中提供了非常多對信息學奧賽很有用的東西。 vector vetor是STL中的一個容器,可以看作一個不定長的數組,其基本形式為: vector<數據類型> 名字; 如: vector ...
  • 前言 最近自己做了個 Falsk 小項目,在部署上伺服器的時候,發現雖然不乏相關教程,但大多都是將自己項目代碼複製出來,不講核心邏輯,不太簡潔,於是將自己部署的經驗寫成內容分享出來。 uWSGI 簡介 uWSGI: 一種實現了多種協議(包括 uwsgi、http)並能提供伺服器搭建功能的 Pytho ...
  • 1 文本Embedding 將整個文本轉化為實數向量的技術。 Embedding優點是可將離散的詞語或句子轉化為連續的向量,就可用數學方法來處理詞語或句子,捕捉到文本的語義信息,文本和文本的關係信息。 ◉ 優質的Embedding通常會讓語義相似的文本在空間中彼此接近 ◉ 優質的Embedding相 ...