Golang - Design Pattern #23: 3-tier 架構

閱讀時間約 3 分鐘
raw-image


📊 層次化的系統設計 📊

在設計軟體應用程式時,為了保持模組化、可維護性和可擴展性,開發人員通常會使用多層架構。3-tier(三層)架構是其中最常見的一種,它基本上分為三個主要層次:表示層、邏輯層和數據層。


3-tier 架構 📚🖥️🗄️

  1. 表示層 (Presentation Layer) 🖥️: 這是用戶直接互動的部分,通常包括使用者介面。它可以是網頁、桌面應用程式或移動應用程式的前端。
  2. 邏輯層 (Business Logic Layer) 📊: 這裡是應用程式的核心部分,執行具體的業務邏輯,如計算、數據處理和規則驗證。
  3. 數據層 (Data Layer) 🗄️: 負責管理數據庫連接、數據持久化和資料檢索。


實例

📚 書店系統

想像一個簡單的書店管理系統:


  1. 表示層 - 使用者可以瀏覽書籍、查看詳細信息和加入購物車。
func displayBooks() {
books := businessLayer.getAvailableBooks()
for _, book := range books {
fmt.Println(book.Title, book.Author)
}
}

func viewBookDetails(id int) {
book := businessLayer.getBookDetails(id)
fmt.Println(book.Title, book.Author, book.Description)
}

func addToCart(id int) {
businessLayer.addBookToCart(id)
}
  1. 邏輯層 - 處理業務邏輯,如查找書籍、檢查存貨和更新購物車。
func getAvailableBooks() []Book {
return dataLayer.fetchBooks()
}

func getBookDetails(id int) Book {
return dataLayer.getBookById(id)
}

func addBookToCart(id int) {
if dataLayer.checkStock(id) {
dataLayer.updateCart(id)
} else {
fmt.Println("Book out of stock!")
}
}
  1. 數據層 - 與數據庫互動,提供邏輯層所需的數據。
func fetchBooks() []Book {
// Fetch books from database
}

func getBookById(id int) Book {
// Fetch a specific book by ID from database
}

func checkStock(id int) bool {
// Check if the book is in stock
}

func updateCart(id int) {
// Add book to user's cart in the database
}


結論 🏁

3-tier 架構提供了一個組織良好、模組化的方法來設計軟體應用程式。這不僅確保了應用程式的可維護性和可擴展性,而且還提高了重用和獨立開發的能力。透過這種分層的方法,開發者可以專注於一個特定部分,而不必擔心其他部分。

31會員
194內容數
歡迎來到【代碼的詩情】:探索程式語言之美 系列,這是一場優雅的程式之旅,透過詩歌的抒發,尋找不同程式語言的美感和精髓。 在這個系列中,我們將透過文字的韻律,深入探索多種程式語言的核心概念和語法,以及它們獨特的應用和技巧。每一篇詩歌都是一個故事,每一段代碼都是一句詩句,讓代碼的旋律和詩情在其中相互交織。
留言0
查看全部
發表第一個留言支持創作者!
KH Huang的沙龍 的其他內容
你有沒有想過,當你在玩電子遊戲時,每次過關或失敗後,遊戲是如何保存你的遊戲進度的呢? 🎮 或者當你正在編輯文檔時,"Undo" 功能又是如何工作的? 这些都可以通過備忘錄模式來實現!
當我們需要給某個系統或應用程序添加一種新的語言或表達式時,解譯器模式就派上了用場。這種模式提供了一種將句子或表達式分解成多個令牌的方法,然後根據這些令牌進行解釋或解析。
訪問者模式 (Visitor Pattern) 是一種設計模式,它允許開發者將新的操作新增到現有物件結構中,而不必修改該結構的內部代碼。該模式的重點是將操作和物件結構分離,提供一個彈性的方式新增新的行為。
在許多複雜的程式設計問題中,如何將抽象與其具體實現分離開來,往往是一個重要的挑戰。橋接模式正是為了解決這樣的問題而生。透過橋接模式 (Bridge Pattern),不僅可以確保抽象和實現在結構上分離,還能提供一套彈性的機制來適應變化。
在軟體開發中,處理nil或空值是一個常見的挑戰。不妥當地處理它們可能導致錯誤,使得程式碼的健壯性下降。但有沒有一種方法,可以讓我們在不做特殊檢查的情況下,優雅地處理這些空值呢?答案是肯定的,那就是空物件模式 (Null Object Pattern)!
創建物件有時是一個資源密集型和耗時的過程,尤其是當涉及到從資料庫或其他來源初始化物件時。原型模式就是為了解決這種問題🔧,它提供了一種方法,能夠通過複製一個已存在的物件來迅速創建新物件,而不是從頭開始。
你有沒有想過,當你在玩電子遊戲時,每次過關或失敗後,遊戲是如何保存你的遊戲進度的呢? 🎮 或者當你正在編輯文檔時,"Undo" 功能又是如何工作的? 这些都可以通過備忘錄模式來實現!
當我們需要給某個系統或應用程序添加一種新的語言或表達式時,解譯器模式就派上了用場。這種模式提供了一種將句子或表達式分解成多個令牌的方法,然後根據這些令牌進行解釋或解析。
訪問者模式 (Visitor Pattern) 是一種設計模式,它允許開發者將新的操作新增到現有物件結構中,而不必修改該結構的內部代碼。該模式的重點是將操作和物件結構分離,提供一個彈性的方式新增新的行為。
在許多複雜的程式設計問題中,如何將抽象與其具體實現分離開來,往往是一個重要的挑戰。橋接模式正是為了解決這樣的問題而生。透過橋接模式 (Bridge Pattern),不僅可以確保抽象和實現在結構上分離,還能提供一套彈性的機制來適應變化。
在軟體開發中,處理nil或空值是一個常見的挑戰。不妥當地處理它們可能導致錯誤,使得程式碼的健壯性下降。但有沒有一種方法,可以讓我們在不做特殊檢查的情況下,優雅地處理這些空值呢?答案是肯定的,那就是空物件模式 (Null Object Pattern)!
創建物件有時是一個資源密集型和耗時的過程,尤其是當涉及到從資料庫或其他來源初始化物件時。原型模式就是為了解決這種問題🔧,它提供了一種方法,能夠通過複製一個已存在的物件來迅速創建新物件,而不是從頭開始。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
🚀 在Gin中整合GraphQL和MongoDB:靈活的數據查詢 隨著Web應用的複雜度增加,開發者尋找更靈活和高效的方式來查詢和操作數據。GraphQL作為一種查詢語言,允許用戶精確地指定他們想要的數據,而MongoDB作為一個靈活的NoSQL數據庫,可以很好地支持這種查詢。結合這兩者,我
Thumbnail
嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!
Thumbnail
嗨,大家好!今天我們來聊聊什麼是延遲評估模式,它的好處是啥,還有在 Go 裡面是怎麼玩的。
Thumbnail
在許多大型系統中,不同的子系統需要共享和修改某些資訊以達到一個共同目的。在這種情況下,傳統的方法可能會造成混亂和冗餘。這時,黑板模式出現了,它提供了一個統一的架構,讓這些子系統可以有效率地協作。
Thumbnail
在物件導向的世界中,物件的行為會基於它的狀態而改變。當我們面臨更多的狀態和轉換時,狀態機就成為必要,而HSM(Hierarchical State Machine,層次狀態機)模式更是一個進一步的解決方案,它以層次化的方式組織狀態。
Thumbnail
👨‍💻簡介 在程式開發的世界中,我們經常需要處理各式各樣的資料,可能是一個人的個人資訊,也可能是一個商品的詳細訊息。當我們面對這麼多的資料時,如何將它們有系統地整理起來,讓我們能夠輕鬆地找到所需,便成了一個重要的課題。這時,結構體的概念就像是一道曙光,為我們提供了一個非常有力的工具。 結
Thumbnail
👨‍💻簡介 在 Go 語言中,函數(Function)是一個強大且重要的概念,就像食譜一樣,告訴你應該如何處理食材,最後得到一道美味的料理。經過哪些程序讓程式更有組織性和可讀性。函數可幫助你將程式碼區塊組織成可重複使用的元件,進而執行特定的任務。
Thumbnail
👨‍💻簡介 Go 語言有各種資料型別,分為基本型別和複合型別。基本型別包括: 整數、浮點數、布林值、字串 複合型別包括: 陣列、片段、結構、函式、對映、通道、介面 等。 整數型別 整數型別有許多種,像是 int8、int16、int32、int64。我們可以依據實際需求選擇。
Thumbnail
跟團住在號稱5星級飯店,SONO CALM GOYANG HOTEL 出發前在網路上找不到相關資料,google附近的地圖失真,於是來發一篇文 沒拍房間內部,房間還蠻大的,兩張單人床中間兩旁都有空間可以走動,開放式衣架,備品有小瓶沐浴乳、洗髮精、潤髮乳,都是濃濃的薄荷味,如果不能接受的話,最好自
Thumbnail
這篇文章將會講述常用圖檔的檔案格式差異、比較和應用。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
🚀 在Gin中整合GraphQL和MongoDB:靈活的數據查詢 隨著Web應用的複雜度增加,開發者尋找更靈活和高效的方式來查詢和操作數據。GraphQL作為一種查詢語言,允許用戶精確地指定他們想要的數據,而MongoDB作為一個靈活的NoSQL數據庫,可以很好地支持這種查詢。結合這兩者,我
Thumbnail
嗨!今天我們來深入探討鏈式方法模式,也就是讓你可以一路連續調用方法,看起來好像在鏈接它們似的。那麼,讓我們馬上進入主題吧!
Thumbnail
嗨,大家好!今天我們來聊聊什麼是延遲評估模式,它的好處是啥,還有在 Go 裡面是怎麼玩的。
Thumbnail
在許多大型系統中,不同的子系統需要共享和修改某些資訊以達到一個共同目的。在這種情況下,傳統的方法可能會造成混亂和冗餘。這時,黑板模式出現了,它提供了一個統一的架構,讓這些子系統可以有效率地協作。
Thumbnail
在物件導向的世界中,物件的行為會基於它的狀態而改變。當我們面臨更多的狀態和轉換時,狀態機就成為必要,而HSM(Hierarchical State Machine,層次狀態機)模式更是一個進一步的解決方案,它以層次化的方式組織狀態。
Thumbnail
👨‍💻簡介 在程式開發的世界中,我們經常需要處理各式各樣的資料,可能是一個人的個人資訊,也可能是一個商品的詳細訊息。當我們面對這麼多的資料時,如何將它們有系統地整理起來,讓我們能夠輕鬆地找到所需,便成了一個重要的課題。這時,結構體的概念就像是一道曙光,為我們提供了一個非常有力的工具。 結
Thumbnail
👨‍💻簡介 在 Go 語言中,函數(Function)是一個強大且重要的概念,就像食譜一樣,告訴你應該如何處理食材,最後得到一道美味的料理。經過哪些程序讓程式更有組織性和可讀性。函數可幫助你將程式碼區塊組織成可重複使用的元件,進而執行特定的任務。
Thumbnail
👨‍💻簡介 Go 語言有各種資料型別,分為基本型別和複合型別。基本型別包括: 整數、浮點數、布林值、字串 複合型別包括: 陣列、片段、結構、函式、對映、通道、介面 等。 整數型別 整數型別有許多種,像是 int8、int16、int32、int64。我們可以依據實際需求選擇。
Thumbnail
跟團住在號稱5星級飯店,SONO CALM GOYANG HOTEL 出發前在網路上找不到相關資料,google附近的地圖失真,於是來發一篇文 沒拍房間內部,房間還蠻大的,兩張單人床中間兩旁都有空間可以走動,開放式衣架,備品有小瓶沐浴乳、洗髮精、潤髮乳,都是濃濃的薄荷味,如果不能接受的話,最好自
Thumbnail
這篇文章將會講述常用圖檔的檔案格式差異、比較和應用。