heart 板


LINE

您的比喻非常精準!「接業務的行銷人員」確實很像**埠 (Port)**,他們對外接洽,提供 服務接口;「工廠內部執行生產的人」則像是**適配器 (Adapter)**,他們負責將外部的需 求轉換為實際的生產動作。 --- ### 電影公司 / 廣告公司與六邊形架構的比喻 讓我們用電影公司或廣告公司的例子來比喻六邊形架構: 想像一下,一個**電影製作核心**。這個核心只關心**如何創作一部好電影**:劇本、導演 、演員表演、剪輯邏輯等等。它不關心電影最終是在電影院放映、電視播出還是串流平台。 * **六邊形核心 (Core Application / Domain Layer):** * **電影製作的核心團隊:** 導演、編劇、製片人、演員、剪輯師。他們是電影的靈 魂,專注於內容創作和藝術呈現。他們會定義「拍一部電影」的標準和流程,比如「拍攝某 個場景」、「剪輯一段畫面」等抽象概念。 * **對應:** 應用程式的 **`domain` 和 `service` 層**。 * **埠 (Ports):** 這些是電影核心團隊對外和對內溝通的「接口」。 * **輸入埠 (Incoming/Driving Port):** * **電影發行商的「提案接口」:** 電影公司會給發行商一個接口,讓他們提交 「製作一部新電影」的請求,例如包含電影類型、預算範圍等。核心團隊只知道有這個接口 ,但不知道這個請求是來自 Netflix、華納兄弟還是獨立影展。 * **對應:** 應用程式 **`service` 層的公開方法** (例如 `CreateMovie(requ est)`)。 * **輸出埠 (Outgoing/Driven Port):** * **特效公司 / 配樂工作室的「委託接口」:** 電影核心團隊需要特效或配樂時 ,會定義一個抽象的「特效製作服務」或「配樂製作服務」接口。核心團隊只知道需要調用 這個接口來獲得某種效果或音樂,而不知道是哪家特效公司或配樂工作室在做,也不知道他 們用什麼軟體。 * **對應:** 應用程式 **`repository` 層定義的接口** (例如 `MovieDataStor age` interface)。 * **適配器 (Adapters):** 這些是負責將埠的抽象概念轉換為實際動作的外部實體。 * **驅動適配器 (Driving Adapter):** * **Netflix / 電影節評審:** 他們會通過電影公司提供的「提案接口」,提交 具體的電影製作請求。他們就是請求的發起者。 * **對應:** **`handler` 層** (處理 HTTP 請求,將其轉換為 `service` 層方 法調用)。 * **被驅動適配器 (Driven Adapter):** * **Weta Digital (特效公司) / Hans Zimmer (配樂大師):** 他們接收電影核 心團隊的「委託接口」請求,然後使用各自的工具和專業技能,實際製作出特效或配樂。他 們是核心團隊依賴的外部服務的具體執行者。 * **對應:** **`repository` 接口的具體實作** (例如 `PostgreSQLMovieStora ge`,實際將數據存入資料庫)。 --- ### 檔案結構與六邊形架構的對應 (條列式) 是的,我之前給出的 Go 專案檔案樹狀圖確實是按照六邊形架構的理念來組織的。以下是它 們的簡要對應關係: * **`internal/domain/`**: * **對應六邊形:核心業務邏輯** (Core Business Logic) * **說明:** 包含純粹的業務實體、值對象和業務規則。這是應用程式的靈魂,不依 賴任何外部技術。 * **`internal/service/`**: * **對應六邊形:應用服務層 (Application Service Layer) / 輸入埠 (Incoming Po rts)** * **說明:** 協調 `domain` 層和 `repository` 層,執行高層次的業務操作。這些 是外部世界調用應用程式核心功能的「接口」。 * **`internal/repository/`**: * **對應六邊形:輸出埠 (Outgoing Ports) + 被驅動適配器 (Driven Adapters)** * **說明:** 包含**接口定義**(代表應用程式核心對外部數據持久化的需求,即** 輸出埠**)以及這些接口的**具體實作**(例如 `PostgreSQLUserRepository`,這些實作 是將核心請求轉換為實際資料庫操作的**被驅動適配器**)。 * **`internal/handler/`**: * **對應六邊形:驅動適配器 (Driving Adapters)** * **說明:** 負責處理外部輸入(例如 HTTP 請求),將其轉換為應用程式核心 (`se rvice` 層) 可以理解的格式,然後調用核心服務。Gin 框架的路由處理函數會在這裡。 * **`pkg/database/`** (如果放在 `pkg` 下): * **對應六邊形:被驅動適配器 (Driven Adapters) 的一部分** * **說明:** 負責資料庫的初始化和連接細節,是 `repository` 實作可能依賴的基 礎設施。 * **`web/templates/`** (如果存在): * **對應六邊形:驅動適配器 (Driving Adapters) 的一部分** (在特定情境下,如果 將其視為 UI 層的一部分) * **說明:** 負責用戶界面的呈現,接收來自 `handler` 層準備好的數據並渲染。 這種結構的優點是,無論你更換資料庫、Web 框架還是任何外部服務,核心的 `domain` 和 `service` 層幾乎不需要改變,因為它們只與抽象的「埠」交互,而不是具體的「適配器 」。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.82.133.253 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/heart/M.1748376399.A.6EB.html
1F:→ iLeyaSin365: Illustrator 跨世代不敗經典2024 版:242 個掌握圖 06/22 16:32
2F:→ iLeyaSin365: 文設計的基本技巧與實踐 06/22 16:32







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP