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/cn.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灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP