当前位置: 首页 > article >正文

Go 网关模式:让业务逻辑和外部服务“保持距离“的艺术

场景小剧场想象一下你的电商系统要接支付功能。如果直接在order包里写stripe.Charge()明天老板说换支付宝你就要满世界改代码 网关模式就是给业务逻辑装个万能插座不管插什么支付服务业务代码都不用动 核心三原则 高层模块订单不该依赖底层模块支付 两者都依赖抽象接口 接口由用的人定义而不是做的人这其实就是 SOLID 里的依赖倒置接口隔离原则但咱不背八股文看代码 代码三连击1️⃣ 外部服务干脏活的 Stripe 客户端// external/stripe/gateway.gotypeStripeGatewaystruct{APIKeystring}func(s*StripeGateway)Charge(amountint64,currency,sourcestring)(string,error){fmt.Printf( Stripe] 扣款 %d %s from %s\n,amount,currency,source)returntxn_live_123,nil// 假装调用成功}2️⃣ 业务逻辑只关心能扣款的接口// order/service.go ✨ 接口由使用者定义typepaymentGatewayinterface{Charge(amountint64,currency,sourcestring)(string,error)}typeServicestruct{gateway paymentGateway}func(s*Service)Checkout(amountint64,sourcestring)error{_,err:s.gateway.Charge(amount,USD,source)// 只依赖抽象returnerr}3️⃣ 单元测试Mock 一下快乐翻倍// 测试时塞个假网关不花一分钱typemockGatewaystruct{calledbool}func(m*mockGateway)Charge(...)(string,error){m.calledtrue;returntxn_mock,nil}funcTestCheckout(t*testing.T){mock:mockGateway{}order.NewService(mock).Checkout(1000,card_abc)// ✅ 验证业务逻辑不依赖真实网络}️ 架构关系图依赖接口实现实现实现订单业务 orderpaymentGatewayStripe实现支付宝实现测试Mock 这个模式香在哪优势说明易替换换支付渠道改一行注入代码就行好测试Mock 接口单元测试秒出结果低耦合业务逻辑不知道谁在扣款只知道能扣款接口精简只定义需要的Charge方法拒绝接口污染 实战小贴士// main.go 组装时刻✨stripe:stripe.NewStripeGateway(sk_live_xxx)orderSvc:order.NewService(stripe)// 依赖注入// 想换支付宝只需// alipay : alipay.New(...)// orderSvc : order.NewService(alipay)思考题如果支付网关需要ChargeRefund两个方法但你的业务只需要扣款接口该怎么设计答案还是只定义Charge接口隔离原则安排上 总结网关模式本质是控制依赖方向——让稳定的业务逻辑主导接口定义易变的外部实现去适配它。下次写代码前问问自己“是谁在依赖谁”代码如人生保持适当距离关系更长久

相关文章:

Go 网关模式:让业务逻辑和外部服务“保持距离“的艺术

🎬 场景小剧场 想象一下:你的电商系统要接支付功能。如果直接在 order 包里写 stripe.Charge(),明天老板说"换支付宝",你就要满世界改代码 😫 网关模式就是给业务逻辑装个"万能插座":不…...

SO(3) (本质理解)

一、SO(3) 是什么 SO(3)(Special Orthogonal Group): 几何理解(非常重要) SO(3) 表示: “刚体绕某个轴旋转一个角度” 任何旋转都可以表示为: 一个单位轴 一个角度 这就是: 轴…...

WarcraftHelper:魔兽争霸3终极兼容性工具,轻松实现5大版本完美适配

WarcraftHelper:魔兽争霸3终极兼容性工具,轻松实现5大版本完美适配 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否想让…...

11. 免费GPU资源汇总(三):腾讯云、百度智能云免费算力实操

调试卡在CUDA out of memory?聊聊免费GPU算力的门道 昨天帮同事调试一个目标检测模型,明明batch_size已经调到4了,还是爆显存。实验室的2080Ti卡被其他项目占着,自己笔记本的3060跑不动。这种时候才真切感受到——独立GPU资源对开发者来说,有时候比代码能力还关键。 免费…...

10. 免费GPU资源汇总(二):AutoDL、阿里云免费算力申请与使用

001、系列引言:为什么你需要关注AutoDL与阿里云免费算力? 深夜两点,示波器的波形还在跳,我盯着屏幕里那个诡异的时序毛刺,突然意识到一件事——手头这块老旧的开发板已经跑不动更复杂的模型验证了。同事上周训练一个轻量级YOLO,在自己的笔记本上跑了整整两天,结果因为散…...

Delphi经典8大天坑|第六篇:方法参数缺省值写在实现区,导致缺省值不生效

一、现象描述给方法(过程/函数)定义参数缺省值(默认值)后,调用方法时不传递该参数,期望使用缺省值,但实际运行时,缺省值不生效,参数呈现随机值或错误值,排查时…...

每日一道面试题 08:SpringBoot 自动配置原理

一、核心前提SpringBoot 核心优势:自动配置,无需手动编写大量 XML 配置,简化开发(本质是 “约定优于配置”)自动配置底层依赖:EnableAutoConfiguration 注解 Spring 工厂加载机制 条件注解核心目标&#…...

实战构建多房间直播平台:基于快马AI生成核心业务代码框架

今天想和大家分享一个实战项目的搭建过程——多房间直播平台。这个项目涉及高并发、实时交互等典型直播场景需求,正好用InsCode(快马)平台来快速验证核心功能。以下是具体实现思路和关键设计: 整体架构设计 直播平台的核心在于实时性和扩展性。采用前后端…...

abaqus constraint 中,tie和coupling的区别

通过AI整理相关问题回答 tie和coupling的区别 在 Abaqus 中,Tie (绑定) 和 Coupling (耦合) 是最常用的两种连接约束,但它们在力学逻辑、自由度限制和应用场景上有着本质的区别。1. Tie Constraint (绑定约束) Tie 的核心逻辑是“胶合”。它将两个表面&a…...

从安装到实战:基于快马AI生成openclaw的网站内容监控应用项目

最近在做一个网站内容监控的小工具,尝试用openclaw框架来实现自动化采集和变更检测。这个项目从环境搭建到功能实现踩了不少坑,记录下完整过程给有类似需求的同学参考。 环境准备与openclaw安装 openclaw的安装其实挺简单,直接用pip就能搞定…...

Qwen3-VL-2B低成本方案:边缘设备部署实战案例分享

Qwen3-VL-2B低成本方案:边缘设备部署实战案例分享 边缘设备也能跑多模态大模型?Qwen3-VL-2B给你答案 1. 项目背景与价值 如果你正在寻找一个既强大又轻量的多模态模型,Qwen3-VL-2B-Instruct绝对值得关注。这是阿里最新开源的视觉-语言模型&a…...

小白友好:bge-large-zh-v1.5中文向量模型部署完整流程

小白友好:bge-large-zh-v1.5中文向量模型部署完整流程 1. bge-large-zh-v1.5模型简介 bge-large-zh-v1.5是一款专为中文优化的文本嵌入模型,能够将文本转换为高维向量表示。简单来说,它可以把任何中文句子变成一串数字(向量&…...

不同海外市场,跨境电商AI搜索优化有何差异?

跨境电商的核心特点是“面向全球市场”,而不同海外市场的语言习惯、搜索逻辑、消费场景、采购需求差异巨大,这就决定了AI搜索优化不能“一刀切”,需要结合不同市场的特性,制定差异化的优化策略。很多企业之所以优化效果不佳&#…...

从 OData 元数据到强类型前端:SAP UI5 与 TypeScript 生成服务类型定义的完整实践

在 UI5 项目里引入 TypeScript,很多团队已经能享受到编辑器补全、静态检查、重构安全这些直接收益。可一旦应用开始真正处理业务数据,一个很现实的问题就会出现:UI5 的官方类型定义覆盖了控件、模型、事件、基类 API,但你自己服务里的实体结构,像 Person、SalesOrder、Bus…...

终极GTA5菜单指南:如何用YimMenu彻底改变你的游戏体验

终极GTA5菜单指南:如何用YimMenu彻底改变你的游戏体验 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimM…...

界面重构神器:让Windows 11回归高效操作的ExplorerPatcher深度指南

界面重构神器:让Windows 11回归高效操作的ExplorerPatcher深度指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 你是否经历过这…...

突破网盘下载瓶颈:开源工具如何重塑你的文件获取体验

突破网盘下载瓶颈:开源工具如何重塑你的文件获取体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

【Scratch×AI 系列 05】工程化实战:先统一目录(init),再拆分流水线(plan / exec-plan / build)

摘要 Scratch 项目最容易“做着做着就乱”:素材散落、版本混杂、产物找不到,AI 更是无从下手xw-scratch-init 不是“创建文件夹”,而是把协作与自动化的前提一次性铺好把流程拆成 plan → exec-plan → build,是为了把 AI 从“胡写…...

灵毓秀-牧神-造相Z-Turbo创作实战:如何生成不同风格的灵毓秀图片

灵毓秀-牧神-造相Z-Turbo创作实战:如何生成不同风格的灵毓秀图片 1. 认识灵毓秀-牧神-造相Z-Turbo 灵毓秀-牧神-造相Z-Turbo是一款专注于生成《牧神记》中灵毓秀角色的AI图像生成模型。它基于Xinference框架部署,通过简单的Web界面即可快速生成各种风格…...

用干词背单词,30天轻松背完小学词库1200单词!

用这个方法,30天轻松背完小学词库1200单词!用干词背单词,30天能轻松背完小学词库1200单词!而且会很轻松!用干词App背完小学1200词,30天绰绰有余,甚至还能记得牢、忘得慢。小学英语单词量一般在8…...

Graphormer在纳米材料设计中的应用:碳纳米管手性与导电性关联预测

Graphormer在纳米材料设计中的应用:碳纳米管手性与导电性关联预测 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子基准…...

BiliTools智能视频总结:高效提取B站视频知识精华的全指南

BiliTools智能视频总结:高效提取B站视频知识精华的全指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …...

扫雷-HTML

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>扫雷游戏</title><style>* {margin:…...

人形机器人手指关节选材:铝合金 vs PEEK,谁才是轻量化的终极方案?

在人形机器人研发中&#xff0c;末端执行器&#xff08;手部&#xff09;的性能直接决定了机器人的交互上限。而在手指关节这种“空间极度受限、重量极度敏感、运动频率极高”的部位&#xff0c;选铝合金还是 PEEK&#xff08;聚醚醚酮&#xff09;&#xff0c;本质上是在“结构…...

OpenModScan:工业总线测试与协议调试的开源解决方案

OpenModScan&#xff1a;工业总线测试与协议调试的开源解决方案 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan 在工业自动化领域&#xff0c;设备间的通讯可靠性直接决…...

TouchGal终极指南:3步打造你的专属Galgame社区家园

TouchGal终极指南&#xff1a;3步打造你的专属Galgame社区家园 【免费下载链接】kun-touchgal-next TouchGAL是立足于分享快乐的一站式Galgame文化社区, 为Gal爱好者提供一片净土! 项目地址: https://gitcode.com/gh_mirrors/ku/kun-touchgal-next TouchGal是一个专为Ga…...

PowerToys中文汉化版:微软官方增强工具箱的终极本地化体验

PowerToys中文汉化版&#xff1a;微软官方增强工具箱的终极本地化体验 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN PowerToys中文汉化版是微软官方系统…...

云服务器部署大模型

云服务器部署大模型1. 服务器配置2. 大模型下载3. 部署大模型1. 服务器配置 2. 大模型下载 千问2.5-14B-Instruct https://modelscope.cn/models/Qwen/Qwen2.5-14B-Instruct pip install modelscopemodelscope download --model Qwen/Qwen2.5-14B-Instruct --local_dir /root…...

基于单片机的自行车里程表设计|附源码

基于单片机的自行车里程表设计 源码&#xff1a;点击下载源码 项目简介 这是一个基于51单片机的自行车里程表设计项目&#xff0c;能够实时显示自行车的行驶速度、累计里程&#xff0c;并提供时间显示、超速报警等功能。该项目适合作为单片机课程设计的学习案例&#xff0c;…...

Nano-Banana入门指南:理解Knolling平铺与Exploded View差异及适用场景

Nano-Banana入门指南&#xff1a;理解Knolling平铺与Exploded View差异及适用场景 你是不是经常在网上看到那些把产品零件整整齐齐铺开、或者像爆炸一样散开的酷炫图片&#xff1f;这些图片在电商展示、产品说明书或者技术教程里特别常见&#xff0c;能让人一眼就看清楚产品的…...