name: compact-reviewer:design-architecture description: 用于审查Compact合约架构、评估设计模式、评估模块化程度或分析API设计和代码组织质量时使用。
设计与架构技能
评估合约结构、设计模式和架构质量。
何时使用
此技能在以下查询时激活:
- 合约架构与结构
- Compact中的设计模式
- 模块化与组织
- API设计
- 代码组织
触发词:架构、设计模式、结构、模块化、组织、布局、API设计
快速参考
架构检查清单
| 方面 | 检查项 | 严重性 |
|---|---|---|
| 关注点分离 | 每个电路只有一个职责 | 🟡 中等 |
| 状态封装 | 账本访问受控 | 🟠 高 |
| 清晰接口 | 导出电路有明确目的 | 🟡 中等 |
| 命名约定 | 电路/账本命名清晰 | 🟢 低 |
| 文档 | 公共接口有文档 | 🟢 低 |
良好架构模式
// ✅ 单一职责电路
export circuit deposit(amount: Uint<64>): [] { }
export circuit withdraw(amount: Uint<64>): [] { }
export circuit get_balance(): Uint<64> { }
// ✅ 用于可重用逻辑的辅助电路
circuit verify_owner(): [] {
const caller = get_caller_secret();
assert hash(caller) == owner_hash.read();
}
// ✅ 清晰的状态组织
ledger balances: Map<Bytes<32>, Uint<64>>;
ledger config: Cell<Config>;
ledger admin: Cell<Bytes<32>>;
反模式
// ❌ 上帝电路 - 做太多事
export circuit do_everything(
action: Uint<8>,
arg1: Field,
arg2: Field,
arg3: Field
): Field {
if action == 0 { /* 存款 */ }
if action == 1 { /* 取款 */ }
if action == 2 { /* 转账 */ }
// ...
}
// ❌ 不清晰的命名
export circuit proc(x: Field): Field { }
ledger d: Map<Bytes<32>, Uint<64>>;
审查流程
1. 结构分析
评估整体组织:
1. 统计导出的电路数量 - 过多(>10)建议拆分
2. 检查电路大小 - >50行可能过于复杂
3. 验证辅助电路使用是否恰当
4. 确认账本声明是否按逻辑分组
2. 模式识别
识别常见模式:
| 模式 | 指标 | 质量 |
|---|---|---|
| 所有者模式 | owner_hash, verify_owner() |
✅ 良好 |
| 访问控制 | 基于角色的检查 | ✅ 良好 |
| 升级模式 | implementation 账本 |
⚠️ 复杂 |
| 多重签名 | 需要多个签名 | ✅ 良好 |
| 状态机 | 基于枚举的状态 | ✅ 良好 |
3. 接口设计
检查公共API:
1. 电路名称是否具有描述性?
2. 参数是否最少且清晰?
3. 返回类型是否合适?
4. 相关操作是否分组?
4. 模块化评估
评估分离程度:
1. 逻辑能否独立测试?
2. 关注点是否分离?
3. 状态访问是否受控?
4. 依赖关系是否明确?