前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从抽象地狱逃出来:一段 Python 代码看清“过度设计”的代价

从抽象地狱逃出来:一段 Python 代码看清“过度设计”的代价

原创
作者头像
连连LL
发布于 2025-05-06 15:42:38
发布于 2025-05-06 15:42:38
7500
代码可运行
举报
文章被收录于专栏:技术技术
运行总次数:0
代码可运行

摘要

你可能见过这样的项目:刚起步就整上微服务框架、Kafka 消息中间件一把梭,再加上好几层抽象工厂 + 策略模式。等上线后才发现,系统只有两三个接口,压根没人用。

这些“自我感动式”的开发,其实是一种隐形浪费。它不是技术能力的展现,而是一种“过度假设未来”的风险决策。本文就来聊聊,怎么在架构设计中避免掉进“过度工程”的坑,选对“当下最合适”的解法。

引言

在很多开发讨论中,经常会出现这样的对话:

  • “咱们加个事件总线吧,不然以后不好扩展。”
  • “这个模块最好先拆微服务,以后独立部署才方便。”
  • “要不我们写个接口层 + 抽象层吧,万一换实现也简单。”

这些听起来都很“有道理”,但问题是:

你确定那个“以后”真的会来吗?

架构设计,不能为了“展示设计能力”而去设计。而应该是——为当前的实际问题找最直接、最简单的解决方案,同时保留未来演进的可能。

架构设计里那些常见的“坑”

典型“过度工程”场景盘点

下面这些操作你可能都见过:

  • 项目刚立项,产品都没写完,就先上 DDD + CQRS 架构;
  • 接口调用还没超过 10QPS,就搭建 Kafka + Redis + RabbitMQ 三件套;
  • 把一个简单的“用户积分增加”逻辑,写成工厂模式 + 策略模式 + 抽象接口 + 依赖注入;
  • 三个人的团队,把项目拆成六个微服务部署,还搞 CI/CD 全自动流程;

这些设计在“大公司大业务”里可能确实需要,但对很多项目来说,是 沉没成本+运维负担+认知负债 三杀。

为什么会这样做?

  • 怕未来被打脸:“我们现在不考虑,将来肯定会痛苦。”
  • 试图显得专业:“我会架构设计,抽象能力强。”
  • 兴趣驱动:“我最近刚学完微服务,想找机会试试。”
  • 写着写着就上头了:“加个接口好像也不麻烦,再加个中间层吧?”

“设计是否真的必要”的判断准则

提出三个关键问题

在开始设计之前,问自己:

  1. 这个设计是为了解决当前的问题吗?
  2. 有没有证据表明这个问题“马上就要来”?
  3. 有没有一个更简单的方法,能先解决问题并保留演进空间?

设计越多,维护成本越高;模块越多,沟通成本越高。

识别 YAGNI 现象

YAGNI(You Aren’t Gonna Need It)原则的核心是:

“别为未来做设计,除非它真的已经来了。”

比如:

  • “我们加个缓存接口吧,以后可以换 Redis/Memcached。”但现在连用户量都没破千;
  • “做个抽象层吧,说不定后面接入第三方支付。”但其实你短期根本不打算加;

这些全都是典型的 YAGNI。

用实际例子说话:一个“用户积分”服务的两种写法

背景需求

业务需求非常简单:

  • 给用户加积分;
  • 输入一个 user_id 和积分值;
  • 返回这个用户当前的积分总值。

这类接口在很多 App、运营系统、活动平台里都很常见。

写法一:过度工程版本(反例)

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# service.py
class PointsService:
    def add_points(self, user_id: int, points: int) -> int:
        raise NotImplementedError

class PointsServiceImpl(PointsService):
    def __init__(self):
        self.points_db = {}

    def add_points(self, user_id: int, points: int) -> int:
        self.points_db[user_id] = self.points_db.get(user_id, 0) + points
        return self.points_db[user_id]

# factory.py
def get_points_service() -> PointsService:
    return PointsServiceImpl()

# main.py
service = get_points_service()
print(service.add_points(123, 10))

这个结构你肯定不陌生:接口 -> 实现 -> 工厂模式。

问题是:

  • 现在根本没多个实现;
  • 工厂也没什么逻辑,只是返回一个类;
  • 所有模块拆得很散,不利于快速开发或测试。

写法二:适度设计版本(推荐)

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 简洁明了版本
points_db = {}

def add_points(user_id: int, points: int) -> int:
    points_db[user_id] = points_db.get(user_id, 0) + points
    return points_db[user_id]

# 测试用例
if __name__ == "__main__":
    print(add_points(123, 10))  # 输出: 10
    print(add_points(123, 5))   # 输出: 15

优势:

  • 函数式结构清晰、轻量;
  • 易于快速测试、上手;
  • 不失灵活性,未来可以轻松迁移成 class 结构;
  • 更适合 MVP 阶段快速验证。

QA 环节:你可能会问的几个问题

Q1:那以后业务复杂了怎么办?

答:架构是可以演进的。你今天用一个函数实现,明天拆 class,一周后提取模块,一月后可以拆服务。

Q2:怎么判断是不是过度设计?

答:看使用频率、实现复杂度和维护成本之间的关系。如果你写了 100 行,只为支撑一个调用一次的接口,那就该反思一下。

Q3:是不是完全不能做抽象?

当然不是。适度抽象依然重要,但要把握节奏。抽象是为了解耦,不是为了堆技术词。

总结

架构设计的终极目标,不是“用最炫的技术”,而是“用最低的成本,跑通正确的业务”。

一个好的工程师,不是技术最潮的那一个,而是能判断什么时间该用什么设计的那一个。

切记:写代码是为了解决问题,不是为了写代码本身。

未来展望

未来系统肯定会越来越复杂,需求也会不断增长。但你现在最重要的任务,是:

  • 活下来(先跑通 MVP)
  • 跑得稳(上线不出事)
  • 改得动(迭代不崩盘)

架构设计,不是一次性拍板的定案,而是伴随业务和团队成长的“长期策略”。

真正的技术力,是看你如何处理“复杂问题”,而不是你堆了多少“复杂技术”。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
超大型智算中心(AIDC)的应用场景及关键技术
超大型智算中心是拥有几千上万张、甚至十万张加速卡,总算力可达几百PFLOPS~EFLOPS级别的智算中心。
霞姐聊IT
2025/05/30
1490
超大型智算中心(AIDC)的应用场景及关键技术
FP8模型不再挑卡!DeepSeek推理成本减半速度翻番,清华团队开源「赤兔」推理引擎
今天,清华系科创企业清程极智与清华大学翟季冬教授团队联合宣布开源大模型推理引擎「赤兔」(Chitu),率先实现了非 H 卡设备(英伟达 Hopper 架构之前的 GPU 卡及各类国产卡)运行原生 FP8 模型的突破。
机器之心
2025/03/14
2600
FP8模型不再挑卡!DeepSeek推理成本减半速度翻番,清华团队开源「赤兔」推理引擎
不牺牲算法,不挑剔芯片,这个来自中科院的团队正在加速国产AI芯片破局
在《沙丘》构建的未来世界里,「得香料者得天下」。但在生成式 AI 席卷的智能世界里,得 GPU 者得天下。
机器之心
2024/04/12
5120
不牺牲算法,不挑剔芯片,这个来自中科院的团队正在加速国产AI芯片破局
模型训练过程和国产算力面临的挑战
典型的模型训练流程可以从计算的角度分为三个关键步骤:前向计算、反向计算和参数更新。这些步骤构成了模型在训练中的核心计算过程。
刘盼
2024/04/02
2400
模型训练过程和国产算力面临的挑战
🌍 算力即权力?解析AI竞赛背后的基础设施战争
2023年ChatGPT的爆发,揭开了AI竞赛的冰山一角:GPT-4训练消耗的算力≈5亿度电,足够支撑一个小国全年用电。全球科技巨头疯狂囤积GPU,OpenAI被曝“算力饥荒”限制模型迭代速度。算力,这个曾经藏在代码背后的“隐形资源”,正成为大国博弈与企业竞争的核心战场。
Jimaks
2025/03/20
1540
算力芯片,如何突围?
最近跟一个朋友,交流了一些不那么“纯技术”的话题:后进如何赶超先进?在交流的过程中,也引发了我对技术发展的一些更深层次的思考。
chaobowx
2023/11/16
3730
算力芯片,如何突围?
DeepSeek自研AI芯片,AI算力新变革?
当下,AI技术迅猛发展,从科研领域的复杂模型训练,到日常生活里智能语音助手的实时交互,算力成了决定AI发展的关键因素。作为大模型领域的后起之秀,DeepSeek对计算资源需求极大。目前,英伟达GPU是AI计算主力,但面对日益复杂的任务,其成本高的问题愈发突出。高昂的采购、能耗与后期维护成本,让依赖英伟达GPU的企业压力山大,这或许就是DeepSeek决心自研芯片的重要原因。
算力之光
2025/02/17
1400
DeepSeek自研AI芯片,AI算力新变革?
寒武纪首颗AI训练芯片亮相:7纳米制程,算力提升四倍,已规模化出货
思元 290 智能芯片是寒武纪的首颗训练芯片,采用台积电 7nm 先进制程工艺,集成 460 亿个晶体管,支持 MLUv02 扩展架构,全面支持 AI 训练、推理或混合型人工智能计算加速任务。
机器之心
2021/01/27
6970
寒武纪首颗AI训练芯片亮相:7纳米制程,算力提升四倍,已规模化出货
为DeepSeek辟谣:五大误解与真相解读
春节至今,DeepSeek的热度持续攀升,伴随而来的,还有很多误解和争议,有人说它是"吊打OpenAI的国货之光",也有人说它"不过是抄国外大模型作业的小聪明"。
小腾资讯君
2025/02/10
1.2K0
大模型引发新一轮技术变革, AI芯片公司迎来新挑战
机器之心发布 机器之心编辑部 ChatGPT 在全球范围内掀起了一场技术革命与商业浪潮,AI 市场也迎来了前所未有的机遇与增量。 当前,AI 基础设施的算力、算法呈现新 “摩尔定律”:相同算力下能训练生产更优质的模型,同时最先进的 AI 模型约每几个月算力需求就会扩大一倍。 根据斯坦福大学和麦肯锡联合发布的《2019 人工智能指数报告》,2012 年之前最先进 AI 模型计算量每两年翻一倍;2012 年之后计算量每 3.4 个月翻一番,从 2012 年到 2020 年 3 月已增长 30 万倍。 伴随着大
机器之心
2023/03/29
2480
大模型引发新一轮技术变革, AI芯片公司迎来新挑战
英伟达 H100 vs. 苹果M2,大模型训练,哪款性价比更高?
关键词:M2芯片;Ultra;M1芯片;UltraFusion;ULTRAMAN;RTX4090、A800;A100;H100;LLAMA、LM、AIGC、CHATGLM、LLVM、LLM、LLMs、GLM、NLP、ChatGPT、AGI、HPC、GPU、CPU、CPU+GPU、英伟达、Nvidia、英特尔、AMD、高性能计算、高性能服务器、蓝海大脑、多元异构算力、高性能计算、大模型训练、大型语言模型、通用人工智能、GPU服务器、GPU集群、大模型训练GPU集群、大语言模型
液冷服务器
2023/07/28
2.3K0
英伟达 H100 vs. 苹果M2,大模型训练,哪款性价比更高?
MLPerf Training v2.0 榜单发布,在同等GPU配置下百度飞桨性能世界第一
机器之心发布 机器之心编辑部 在 6 月 30 日最新发布的 MLPerf Training v2.0 榜单里,百度使用飞桨框架(PaddlePaddle)和百度智能云百舸计算平台提交的 BERT Large 模型 GPU 训练性能结果,在同等 GPU 配置下的所有提交结果里排名第一,超越了高度定制优化且长期处于榜单领先位置的 NGC PyTorch 框架,向全世界展现了飞桨框架的性能优势。 图 1 MLPerf Training v2.0 BERT 模型效能前五名训练成果。 图 1 展示了 MLPer
机器之心
2022/07/04
6680
MLPerf Training v2.0 榜单发布,在同等GPU配置下百度飞桨性能世界第一
百亿token免费用!国产平台一键拖拽定制大模型,多元算力极具性价比
就在今天,无问芯穹发布了基于多芯片算力底座的无穹Infini-AI大模型开发与服务平台,并宣布自3月31日起正式开放全量注册,给所有实名注册的个人和企业用户提供百亿tokens免费配额。
新智元
2024/04/12
2590
百亿token免费用!国产平台一键拖拽定制大模型,多元算力极具性价比
算力基础设施的风险与挑战
但算力基础设施,和我们的能源、电力、交通等传统基础设施相比,仍存在许多风险和挑战。今天这篇文章,我们抛砖引玉。
chaobowx
2024/06/04
3090
算力基础设施的风险与挑战
AIGC算力玩家现状:爆单与挑战并行,洞察趋势更为关键 | AIGC算力沙龙
在量子位智库最新举办的AIGC算力沙龙上,算力领域数月来备受关注的趋势发展、行业挑战及最新动向,都有了更加明确的解读。
量子位
2023/09/08
4680
AIGC算力玩家现状:爆单与挑战并行,洞察趋势更为关键 | AIGC算力沙龙
超异构计算:大算力芯片的未来
计算的问题应该能够:分解成可以同时解决的离散工作;随时执行多条程序指令;使用多个计算资源比使用单个计算资源在更短的时间内解决问题。
chaobowx
2022/12/16
1.3K0
超异构计算:大算力芯片的未来
专为DeepSeek类强推理加速,老黄拿出Blackwell Ultra,下代架构性能还要翻倍
「因为 AI 技术爆发,GTC 大会的规模每年都在扩大,以前人们说 GTC 是 AI 的伍德斯托克音乐节,今年我们搬进了体育场,我觉得 GTC 已经成了 AI 的超级碗,」英伟达 CEO 黄仁勋说道。「唯一的不同在于每个人都是『超级碗』的赢家。」
机器之心
2025/03/20
1060
专为DeepSeek类强推理加速,老黄拿出Blackwell Ultra,下代架构性能还要翻倍
DeepSeek开源周首日放大招,我和它进行了一次“深度思考”的采访
FlashMLA是 DeepSeek 开源的一个高性能 MLA(Multi-Layer Attention)解码内核,专为英伟达 Hopper 架构 GPU(如 H100)优化设计,旨在加速大语言模型(LLM)推理过程中的注意力计算。它是针对 Transformer 模型中的 Multi-Head Attention(MHA) 或 Multi-Layer Attention(MLA) 机制的底层实现优化,特别适用于生成任务(如文本生成、对话系统)中的自回归解码阶段。
算力之光
2025/02/24
2180
DeepSeek开源周首日放大招,我和它进行了一次“深度思考”的采访
第三代通用计算,大算力芯片”弯道超车“的历史时机
关于“弯道超车”,行业内很多人士对此嗤之以鼻,他们认为:做事情要脚踏实地,持之以恒,才有可能超越。
chaobowx
2023/09/06
3880
第三代通用计算,大算力芯片”弯道超车“的历史时机
大规模异构集群,混合并行分布式系统,解释算力不均衡问题HETHUB
3.2大规模异构集群,混合并行分布式系统,解释算力不均衡问题HETHUB_哔哩哔哩_bilibili
爱串门的小马驹
2024/09/30
4060
大规模异构集群,混合并行分布式系统,解释算力不均衡问题HETHUB
推荐阅读
超大型智算中心(AIDC)的应用场景及关键技术
1490
FP8模型不再挑卡!DeepSeek推理成本减半速度翻番,清华团队开源「赤兔」推理引擎
2600
不牺牲算法,不挑剔芯片,这个来自中科院的团队正在加速国产AI芯片破局
5120
模型训练过程和国产算力面临的挑战
2400
🌍 算力即权力?解析AI竞赛背后的基础设施战争
1540
算力芯片,如何突围?
3730
DeepSeek自研AI芯片,AI算力新变革?
1400
寒武纪首颗AI训练芯片亮相:7纳米制程,算力提升四倍,已规模化出货
6970
为DeepSeek辟谣:五大误解与真相解读
1.2K0
大模型引发新一轮技术变革, AI芯片公司迎来新挑战
2480
英伟达 H100 vs. 苹果M2,大模型训练,哪款性价比更高?
2.3K0
MLPerf Training v2.0 榜单发布,在同等GPU配置下百度飞桨性能世界第一
6680
百亿token免费用!国产平台一键拖拽定制大模型,多元算力极具性价比
2590
算力基础设施的风险与挑战
3090
AIGC算力玩家现状:爆单与挑战并行,洞察趋势更为关键 | AIGC算力沙龙
4680
超异构计算:大算力芯片的未来
1.3K0
专为DeepSeek类强推理加速,老黄拿出Blackwell Ultra,下代架构性能还要翻倍
1060
DeepSeek开源周首日放大招,我和它进行了一次“深度思考”的采访
2180
第三代通用计算,大算力芯片”弯道超车“的历史时机
3880
大规模异构集群,混合并行分布式系统,解释算力不均衡问题HETHUB
4060
相关推荐
超大型智算中心(AIDC)的应用场景及关键技术
更多 >
LV.0
全球人工智能信息服务
目录
  • 摘要
  • 引言
  • 架构设计里那些常见的“坑”
    • 典型“过度工程”场景盘点
    • 为什么会这样做?
  • “设计是否真的必要”的判断准则
    • 提出三个关键问题
    • 识别 YAGNI 现象
  • 用实际例子说话:一个“用户积分”服务的两种写法
    • 背景需求
    • 写法一:过度工程版本(反例)
    • 写法二:适度设计版本(推荐)
  • QA 环节:你可能会问的几个问题
    • Q1:那以后业务复杂了怎么办?
    • Q2:怎么判断是不是过度设计?
    • Q3:是不是完全不能做抽象?
  • 总结
  • 未来展望
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档