1. DRY 与 WET 的边界中哪些重复是必要的(如测试用例、模板代码、安全检查样板)
DRY 与 WET 的边界在哪里?哪些重复是必要的(测试用例、模板代码、安全检查样板)?
- DRY 与 WET 的概念
- 必要重复的类型
- 判断边界
DRY(Don't Repeat Yourself)指"每个知识/逻辑在系统中只有一份单一权威来源",WET(Write Everything Twice)指重复写。但并非所有重复都该消除,存在"必要重复":测试用例(故意与实现分离,验证独立);模板代码(boilerplate,框架/语言样板,如标准 HTTP 处理结构,抽抽象反而增加复杂度);安全检查样板(安全边界应显式重复,避免隐式魔法);跨边界的数据(如 API 契约在各端重复,但应由 IDL 单一来源)。边界判断:DRY 针对"知识/逻辑/意图",而非"文本/样式"。若重复的是"同一份可变逻辑",应 DRY;若重复是"独立存在的实例/必要的显式",应保留 WET。
滥用 DRY 会把"看似相同实则独立"的代码强行合并,造成错误抽象。判断核心是"重复的是知识还是产物":同一知识单源,必要产物(测试、样板、安全显式)可重复。误解 DRY 正是"重复代码 vs 错误抽象"问题的根源。