初级开发者写代码。高级开发者删除它。
Source: Dev.to
概览
我们常常赞美添加新功能、快速交付以及“把事情做好”。但有时,最有成效的做法是停下来,审视你的代码库,并承认:“这太乱了。”
过去几个月,我一直在构建 DotShare,一个帮助开发者将代码片段分享到社交媒体的 VS Code 插件。它运行良好——用户很喜欢——但其内部实现却是一场噩梦。
这就是我在 24 小时内将一个 2000 多行的单体文件 重构为干净的 Clean Architecture 的故事。
🎥 转型(30 秒观看)
光说不练不算数。这是删除 2000 行意大利面式代码的真实画面。纯粹的满足感。
🍝 问题: “单体类” 陷阱
我掉进了经典的陷阱。我从一个文件 DotShareProvider.ts 开始。
-
起初大约 200 行——我觉得“还能管理”。
-
然后我加入了 LinkedIn 支持、Telegram、AI 标题生成……
-
不知不觉,我面对的是一个 2000 行的巨兽。
-
逻辑与 UI 紧密耦合。
-
认证令牌与 UI 渲染在同一个类里处理。
-
调试意味着不停地滚动……滚动……滚动。
🧹 解决方案:Clean Architecture
我决定停止“补丁式”开发,转向“工程化”。我用了 24 小时从头重写核心架构。
1. 打破单体
我摒弃了单文件方式,采用基于 单一职责原则(SRP) 的模块化结构。
Services – 纯业务逻辑
HistoryServiceAnalyticsService
Handlers – UI 与服务之间的桥梁
PostHandlerConfigHandler
UI – 仅负责渲染
DotShareProvider
结果
不再是一个文件搞定所有功能,项目现在由九个专注的文件组成,每个文件只做好 一件事。
🛡️ 安全升级
最关键的部分是保护认证令牌。之前它们存放在 globalState(普通 JSON)中。我把所有内容迁移到了 VS Code 的 SecretStorage API。
// Old Way (Insecure)
this.context.globalState.update('linkedinToken', token);
// New Way (Enterprise Security)
await this.context.secrets.store('linkedinToken', token);