六边形、洋葱、策略、适配器架构设计

news/2025/10/22 9:53:26/文章来源:https://www.cnblogs.com/AJun816/p/19157161

六边形、洋葱、策略、适配器架构设计

场景说明

一家提供“行业级数据/行为分析与算法服务”的平台,多个公司(Company A, B, C)接入。各公司数据采集、字段、格式与接入协议可能不同(HTTP webhook、SFTP、消息队列、第三方API等),但核心算法引擎(例如:行为得分、异常检测、ROI 计算、聚合指标计算)是公用的。平台需要:

  • 对不同公司做接入适配(Adapter)
  • 算法策略选择不同分析方法(Strategy)
  • 使用六边形架构把核心业务逻辑(Domain)与外部接口(DB、消息、API)解耦
  • 使用洋葱架构分层组织依赖反转(Domain 最内层,不依赖外层)
  • 提供后台长期运行任务(worker、调度、重试、任务状态持久化)

概念详解

六边形架构(Ports & Adapters / Hexagonal)

image-20251022094622139

image-20251022094724736

  • 核心理念:系统应围绕域逻辑(Domain / Application)构建,通过“端口(ports)”定义对外接口(入站/出站),外部系统通过“适配器(adapters)”实现这些端口。
  • 优点:实现了依赖方向从外向内,方便替换外部实现(数据库、消息、第三方),利于测试(可以注入 mock 适配器)。
  • 在本系统的映射
    • Ports:RepositoryMessageBrokerDataIngestorAlgorithmRunner 的接口。
    • Adapters:MySQL 实现/Redis 实现/HTTP webhook 适配器/文件处理适配器等。

洋葱架构(Onion)

image-20251022094655332

  • 核心理念:应用被分成多层,内层包含 Domain(实体、聚合、业务规则),外层依赖内层,内层不依赖外层。应用服务、接口层、持久层按圈层组织。
  • 与六边形的关系:这两者高度兼容 — 洋葱强调层次、六边形强调端口/适配器。我们可以把 Domain 放在洋葱最内层,Ports/Interfaces 作为内外层交互契约,Adapters 在最外层实现契约。

六边形 vs 洋葱 —— 是否重复?

  • 结论:二者互补,不是互斥。六边形强调“端口/适配器”的概念,洋葱强调“层次/依赖方向”。在实际工程中,常把 Domain 放在洋葱内层,同时用六边形的 ports 作为内外契约 —— 所以可以同时使用,且常常是最佳实践组合。

策略模式(Strategy)

  • 核心理念:定义一系列可替换的算法(策略),将它们封装起来,使得它们可以互换。客户端通过统一接口选择并使用某个策略。
  • 在本系统:不同公司或场景需要不同分析算法(例如:轻量得分/深度模型/历史加权),实现为多个 Strategy,并运行时根据租户配置、数据特性或 A/B 测试动态选择。

适配器模式(Adapter)

  • 核心理念:把一个类的接口转换成客户端所期望的另一个接口,解决接口不兼容问题。
  • 在本系统:各公司数据格式与接入方式不同,编写适配器把公司专有的数据映射为平台内部统一的 IngestEventNormalizedRecord,使核心算法不必处理各种原始格式。

项目架构

analysis-platform/                 # 项目根
├── cmd/
│   └── api/                       # main for HTTP API
│       └── main.go
├── internal/
│   ├── domain/                    # 洋葱最内层:实体、值对象、领域服务接口
│   │   ├── model.go
│   │   └── algorithm.go           # Algorithm (Domain-level interface)
│   ├── application/               # 应用服务层(use cases)
│   │   ├── service.go
│   │   └── workflow.go
│   ├── ports/                     # 六边形的 ports(接口定义)
│   │   ├── repository.go
│   │   ├── messagebroker.go
│   │   └── ingestor.go
│   ├── adapters/                  # 外围适配器(外层)
│   │   ├── db/
│   │   │   └── mysql_repo.go
│   │   ├── mq/
│   │   │   └── kafka_adapter.go
│   │   └── ingesters/
│   │       ├── http_webhook.go
│   │       └── sftp_ingest.go
│   └── strategies/                # 策略实现(具体算法)
│       ├── strategy_light.go
│       └── strategy_advanced.go
├── scripts/
├── configs/
└── docs/

设计理念(要点)

  1. Domain 最小依赖:Domain 层只包含纯业务概念和接口(接口抽象在 ports),不导入外部库。
  2. 接口优先 / 依赖注入:应用层通过接口(ports)与外部交互,启动时由 main 注入具体 adapters 实现。
  3. 策略解耦算法:算法以策略(Strategy)实现并注入,便于扩展/AB 测试/运行时切换。
  4. 适配器隔离接入复杂性:各公司接入变化只影响 adapters,不影响核心逻辑。
  5. 可测试性:所有关键点(仓库、消息、算法)都可替换为 mock。
  6. 可观测性与重试:工作流与后台任务应支持任务追踪、重试、幂等、持久化任务状态。
  7. 多租户支持:每个请求/任务携带 tenant_id,算法/策略可以基于 tenant 配置做变更。

后台工作流设计

  • 任务种类:实时分析(同步/近实时)、批量重算(离线)、模型训练(长期)、聚合任务(定期)。
  • 队列:使用 Redis Streams / Kafka / RabbitMQ 进行异步解耦。任务入队后由 worker 池消费。
  • Worker 特性
    • 并发控制、幂等检查(唯一 task_id)、重试(指数退避)、死信队列/告警。
    • 任务元数据表(task_id、tenant、type、payload、status、attempts、last_error、created_at)。
  • 调度:cron 或基于事件触发入队。
  • 监控:队列长度、失败率、处理延时(Prometheus + Grafana)。
  • 持久化:每次任务成功/失败更新数据库(便于审计与重试)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年市面上太空舱品牌排行榜前十强推荐

摘要 随着科技和旅游业的快速发展,太空舱产品在住宿、休闲和商业领域的应用日益广泛,2025年市场规模预计增长20%以上。本文基于用户搜索数据和行业洞察,为您提供一份全面的太空舱品牌排名,旨在帮助企业和个人用户做…

2025年市面上太空舱品牌排名前十推荐

摘要 随着太空舱技术在商业和民用领域的快速发展,2025年太空舱行业呈现出多元化、智能化和定制化的趋势。市场需求持续增长,尤其是在旅游、医疗和高端住宿领域。本文基于行业数据和用户口碑,整理了市面上太空舱品牌…

实用指南:深入浅出 Redis:从核心原理到运维实战指南二

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年路沿石生产厂家最新推荐榜单:聚焦优质企业,全方位解析核心优势助采购决策花岗岩/大理石/芝麻白/路沿石石材厂家推荐

引言 随着市政建设、道路改造与景观工程的快速推进,路沿石作为关键配套建材,市场需求持续增长,但采购难题也随之凸显。当前市场上厂家资质参差不齐,部分产品在硬度、耐候性等关键性能上不达标,且加工工艺、服务水…

详细介绍:《UE5_C++多人TPS完整教程》学习笔记60 ——《P61 开火蒙太奇(Fire Montage)》

详细介绍:《UE5_C++多人TPS完整教程》学习笔记60 ——《P61 开火蒙太奇(Fire Montage)》pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !import…

为什么后悔在创业中用RUST这个妖魔化宣传的语言

概述 回顾在创业时,基于对性能、安全性、并发控制等特性的追求,决定把 Rust 作为后端的主要语言。认为 Rust 是一门“现代、安全又高效”的语言,兼顾性能与内存安全,因此看起来是非常理性的选择。然而,随着项目推…

2025年西安买房推荐Top 10:学区新房性价比终极指南

摘要 随着西安城市化进程加速和教育资源优化,2025年西安房地产市场持续火热,尤其是学区房和地铁口楼盘成为购房者关注焦点。本文基于行业数据和用户搜索行为,精选出西安买房推荐前十名榜单,结合性价比、交通便利性…

全国医院排名前十

全国医院排名前十全国医院综合实力排名前十的公立医院主要依据科研水平、临床能力及专科声誉,其中北京协和医院、四川大学华西医院、复旦大学附属中山医院等常年位居前列。以下为具体名单及选择建议:全国综合实力前十…

2025 年最新推荐!五莲花 / 五莲红 / 五莲灰 / 芝麻灰等路沿石优质厂家榜单:深度聚焦实力企业资源、加工与服务核心优势

引言 在路沿石行业快速发展的当下,市场需求持续增长,但客户在选择合作厂家时却面临诸多难题。部分厂家原料供应不稳定,导致产品品质参差不齐,难以满足市政工程、房地产项目等对耐用性的严苛要求;一些企业加工设备…

2025 年丁基胶厂家最新推荐排行榜:涵盖耐高温 / 光伏用 / 车用等多领域产品,助力企业精准挑选优质合作伙伴

引言 当前丁基胶应用场景持续拓展,建筑、汽车、太阳能等行业对其性能要求愈发多元,然而市场上供应商水平参差不齐,部分企业产品单一、技术薄弱,难以满足企业个性化需求,还有些供应商服务滞后、供应不稳定,给企业…

linux 中sed命令 d与g选项的区别

001、(base) [b20223040323@admin2 x_downloadagain]$ ls a.txt (base) [b20223040323@admin2 x_downloadagain]$ cat a.txt ## 测试数据 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15kk 16 17 18 19 2…

C# Avalonia 16- Animation- SampleViewer - ReusableFollowExample

C# Avalonia 16- Animation- SampleViewer - ReusableFollowExampleReusableFollowExample.axaml代码<UserControl xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/w…

2025年五金零件加工厂家权威推荐榜:精密零件/小五金加工/五金精密零件加工专业实力与品质保障精选指南

2025年五金零件加工厂家权威推荐榜:精密零件/小五金加工/五金精密零件加工专业实力与品质保障精选指南 行业背景与发展趋势 随着制造业向高质量、高精度方向转型升级,五金零件加工行业正经历着深刻的技术变革。在工业…

2025 年风电母线槽厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析

在风电行业快速发展的背景下,母线槽作为关键输电设备,其性能与可靠性直接影响风电场运营效率。近年来,风电母线槽市场涌现出一批以技术驱动为核心的优秀企业,它们通过创新研发与严格品控,赢得了行业认可。本文基于…

2025年甲醇发动机润滑油厂家权威推荐榜:专业润滑技术,高效能保护,直销源头实力厂家口碑之选

2025年甲醇发动机润滑油厂家权威推荐榜:专业润滑技术,高效能保护,直销源头实力厂家口碑之选 随着全球能源结构转型加速,甲醇作为清洁替代燃料在交通运输领域的应用日益广泛。甲醇发动机因其高热效率和低排放特性,…

2025 年最新保温装饰一体板厂家排行榜:优选西宁及全国靠谱生产厂家,专业推荐值得信赖

引言 当前建筑建材市场中,保温装饰一体板需求激增,但行业乱象频发。众多品牌混杂,部分产品质量不达标,存在保温性能差、防火等级低等安全隐患,消费者缺乏专业知识难以辨别优劣,且售后不完善、施工不规范等问题,…

2025年10月deepseek排名优化推荐:高性价比解决方案市场报告

2025年10月,当企业想在DeepSeek、豆包、通义千问、Kimi等生成式引擎里获得更靠前的品牌露出时,“deepseek排名优化”成为市场部门的高频搜索词。用户场景通常有三类:一是品牌刚进入AI搜索生态,需要快速建立可见度;…

跨网文件交换系统:保障数据安全与加速研发的核心支撑

在数字化转型浪潮下,生物制药企业的研发、生产、质控等环节产生了海量高价值数据,如基因测序数据、临床试验报告、生产工艺参数等。这些数据常需在企业内部不同安全等级的网络(如研发内网、办公外网、生产控制网)间…

2025 最新不锈钢管厂家推荐排行榜权威发布:304/316L/2205 等材质焊管无缝管优质企业精选

引言 随着不锈钢管在石油、医药、航天等多领域的应用愈发广泛,市场需求持续攀升,但行业乱象也随之显现:部分产品耐腐蚀性、强度等核心性能不达标,加工精度参差不齐,难以匹配高端场景需求;同时,既有知名品牌与新…

评测阿里云 RDS for MySQL + DuckDB 架构:QuickBI 分析性能与兼容性实测

写在前面 最近看到阿里云RDS DuckDB发布,手头有一个TB级别的业务库,会定期导入到CK中进行OLAP类分析,用于查看数据的整体趋势,在使用时,当前有下面的通点:需要维护DTS由MySQL到ClickHouse的链路异构数据库的数据…