笔记: OpenMole——坏味道驱动重构的工程化实践
This commit is contained in:
84
InBox/OpenMole:坏味道驱动重构的工程化实践.md
Normal file
84
InBox/OpenMole:坏味道驱动重构的工程化实践.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
source: 微信公众号「逸言」
|
||||||
|
title: OpenMole:坏味道驱动重构的工程化实践
|
||||||
|
author: 张逸少
|
||||||
|
date: 2026-06-17
|
||||||
|
url: https://mp.weixin.qq.com/s/Whc0JYUHcwI5pPZwDNUCqw
|
||||||
|
tags: [重构, BDR, OpenMole, AI编程, SDD, 坏味道]
|
||||||
|
---
|
||||||
|
|
||||||
|
# OpenMole:坏味道驱动重构的工程化实践
|
||||||
|
|
||||||
|
## 核心概念:BDR(Bad smells-Driven Refactoring)
|
||||||
|
|
||||||
|
规约驱动开发(SDD)让业务规约成为 AI 研发的唯一事实源。BDR 是 SDD 在重构领域的等价物——**把代码坏味道当作与 PRD 同级的事实源**。
|
||||||
|
|
||||||
|
**BDR 铁律:** 没有写进坏味道规约的重构,原则上不准做;识别出坏味道之后,也不允许跳过规约直接开改。
|
||||||
|
|
||||||
|
BDR 与 SDD 五步同构:
|
||||||
|
1. 建立**重构宪法**(Constitution)——定义重构第一性原则、标准步骤和流程门禁
|
||||||
|
2. AI 扫描代码库,将坏味道写成可验收的规约条目(`badsmells.md`)
|
||||||
|
3. 根据规约分解任务(`tasks.md`)
|
||||||
|
4. 通过分析环节(`analysis.md`)做差分检查
|
||||||
|
5. 按标准步骤执行重构
|
||||||
|
|
||||||
|
## OpenMole 框架
|
||||||
|
|
||||||
|
开源地址:https://github.com/agiledon/openmole
|
||||||
|
|
||||||
|
将 BDR 封装为跨平台 Agent Plugin 框架,通过 npm 包 `openmole` 分发。
|
||||||
|
|
||||||
|
**安装:** `npm install -g openmole`,然后在目标项目中执行 `openmole init`
|
||||||
|
|
||||||
|
**支持的 IDE(7种):**
|
||||||
|
| IDE | 表现形式 |
|
||||||
|
|-----|---------|
|
||||||
|
| Cursor | `.cursor/skills/` + `.cursor/commands/` + 用户级 symlink |
|
||||||
|
| OpenCode | `opencode.json` 注册 `.opencode/plugins/openmole.js` |
|
||||||
|
| Claude Code | 用户级 `~/.claude/plugins/local/openmole` symlink |
|
||||||
|
| Codex | 项目 `plugins/openmole` symlink + marketplace 注册 |
|
||||||
|
| Gemini CLI | `.gemini/skills/`、`.gemini/commands/` |
|
||||||
|
| Kiro | `.kiro/skills/`、`.kiro/commands/` |
|
||||||
|
| Qoder | `.qoder/skills/`、`.qoder/commands/` |
|
||||||
|
|
||||||
|
**工作区结构:**
|
||||||
|
```
|
||||||
|
openmole/
|
||||||
|
├── config.yaml # current_change · installed_ides
|
||||||
|
└── changes/
|
||||||
|
├── <change-name>/
|
||||||
|
│ ├── badsmells.md
|
||||||
|
│ ├── tasks.md
|
||||||
|
│ └── analysis.md
|
||||||
|
└── archive/
|
||||||
|
```
|
||||||
|
|
||||||
|
### 五个阶段
|
||||||
|
|
||||||
|
1. **Explore**(`mole:explore`)——系统性地识别代码坏味道,按元规约格式写入 `badsmells.md`
|
||||||
|
2. **Plan**(`mole:plan`)——将坏味道分解为可执行的重构任务,输出 `tasks.md`
|
||||||
|
3. **Verify**(`mole:verify`)——差分检查,确保规约与任务一致
|
||||||
|
4. **Apply**(`mole:apply`)——按任务顺序逐项执行重构,每项经用户确认
|
||||||
|
5. **Archive**(`mole:archive`)——归档
|
||||||
|
|
||||||
|
## 实际验证:roncoo-pay(Java 在线支付系统)
|
||||||
|
|
||||||
|
扫描发现 **32 条坏味道**,按类别:
|
||||||
|
|
||||||
|
- **重复代码(8条)**:BaseController 4 份 90% 相同、ConfigUtil 6 份相同模式、枚举 5 份 copy-paste 等
|
||||||
|
- **大型类和方法(4条)**:DateUtils 1486 行、God Class 1532 行承担 8+ 职责等
|
||||||
|
- **耦合问题(4条)**:DAO 层越权、Spring Bean 绕过 DI 等
|
||||||
|
- **异常处理(4条)**:异常吞没返回 null、fail-silent、e.printStackTrace()
|
||||||
|
- **不良实践(7条)**:public static 可变字段、SimpleDateFormat 线程不安全、sun.misc API 等
|
||||||
|
- **面向对象问题(3条)**:贫血领域模型、字段注入等
|
||||||
|
- **安全问题(2条)**:MD5 密码哈希、敏感信息泄露
|
||||||
|
|
||||||
|
分解为 **31 个重构任务**,分 9 个阶段执行(从快速清理→异常修复→配置规范化→重复代码消除→大型重构→耦合修复→领域模型提升→安全加固→代码规范)。
|
||||||
|
|
||||||
|
## 核心价值
|
||||||
|
|
||||||
|
1. **可审计**——规约可查、任务可追、测试可验,不再是"AI 改完就忘"的黑箱
|
||||||
|
2. **降认知负荷**——面对陌生遗留代码库,AI 自动完成扫描→识别→分解→验证,开发者只需决策和确认
|
||||||
|
3. **可持续治理**——change 机制支持定期发起新重构周期,小步迭代持续提升代码质量
|
||||||
|
|
||||||
|
> "在 AI 时代,若没有一个和代码同权的规约层,'重构'最容易退化成不可审计的聊天。把坏味道上升为重构的'纲',让规约走在前面。"
|
||||||
Reference in New Issue
Block a user