
项目里一旦出现 utils.py,我第一反应 usually 不是“方便”,而是“后面多半要烂”。
今天往里塞一个 format_time(),明天塞一个 send_sms(),后天再补个 check_permission()。过不了多久,这文件就像公司楼下五金店,啥都能买到,代价是你永远不知道东西该去哪找,也不知道改一行会不会把别处带崩。
我见过最离谱的一个 utils.py,两千多行,里面同时有 Excel 导出、订单状态转换、Redis key 拼装、签名校验。出问题时,堆栈里全是 utils.xxx,看着就烦。这种代码不是不能跑,是排查起来很脏。
真要拆,不用上来就搞大重构。先把那种“塞一起纯图省事”的代码,按职责掰开。下面这 3 个模式,够用了。
1)策略模式:别再写一串 if else 了
最常见的烂法,是不同渠道、不同类型、不同规则,硬堆在一个函数里。
刚开始三种还行。等运营再加“直播间专享”“企业团购”“会员日叠券”,这个函数就开始发臭了。
这种地方我一般直接上策略模式,不和 if else 纠缠。
好处不是“高级”,是后面加规则时你不用回头碰老代码。线上这类逻辑最怕改旧分支,尤其结算、优惠、风控,动一下就容易带出历史 bug。
2)工厂模式:别把对象创建到处写
还有一种 utils.py 味道也很重:各种客户端初始化到处复制。
这种代码刚写出来很顺手,后面最麻烦。因为创建对象的细节散得到处都是,改个配置、补个重试、加个超时,要全项目搜。
工厂模式不复杂,说白了就是把“怎么创建”收口。
这地方值钱的是“统一出口”。比如以后短信要切供应商,我会优先改工厂,不会去全局抓 SmsClient(...)。排障的时候也一样,先看工厂吐出来的是谁,比满项目翻要省事。
3)模板方法:流程别复制,留钩子就行
还有一类烂代码,看着不像 utils.py,其实本质一样:流程复制。
导入 CSV 一份,导入 Excel 一份,导入接口数据再来一份。每份代码都是“读数据、校验、清洗、入库”,只是细节不同。
这种我一般不让大家继续 copy 了,直接抽流程骨架。
模板方法的意思不是炫技,就是把稳定流程钉住,把变化点留给子类。这样你后面看代码,一眼就知道流程没跑偏,问题大概率在 clean() 还是 validate(),定位很快。
utils.py 最大的问题,不是文件名丑,是它默认接受“无边界增长”。什么都能塞,最后就什么都说不清。
所以我现在看 Python 项目,先不看框架,先看有没有一坨公共函数到处乱飞。真有,八成已经开始欠债了。
能按规则切换的,用策略模式。 能把创建逻辑收口的,用工厂模式。 能把公共流程压住的,用模板方法。
别再往 utils.py 里塞了。那不是复用,那是堆积。
以上就是“别再用 utils.py 了!这 3 个设计模式让你的 Python 代码更清晰”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/14160/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料