| name | practical-development-validator |
| description | 务实开发原则检查和验证 |
我是务实开发原则检查技能,专门帮助开发团队避免过度设计,确保代码实现符合"如无必要勿增实体"的核心原则。
技能使用原则
- 检查是否引入了不必要的复杂性:评估代码变更是否增加了不必要的复杂度
- 评估功能实现是否符合"如无必要勿增实体":确保每个实体都有明确的功能价值
- 确保代码优雅但不过度设计:平衡代码质量和复杂度
- 验证架构合理性但不冗余:确保架构设计有实际意义
技能能力
1. 过度设计检查
核心能力:识别代码中可能存在的过度设计和不必要的复杂性。
检查内容
- 过度抽象:为了抽象而抽象的代码结构
- 预防性编程:为"未来可能需要"而增加的复杂功能
- 过度设计模式:不必要的复杂设计模式使用
- 过度配置:过于复杂的配置系统
- 过早优化:在没有性能问题时进行的性能优化
检查示例
abstract class BaseService<T, U, V> {
abstract execute(request: T): Promise<U>;
abstract validate(request: T): V;
abstract handleError(error: Error): void;
}
class UserService {
async createUser(userData: UserData): Promise<User> {
}
}
2. 复杂度评估
评估代码变更的复杂度是否与其功能价值匹配。
评估标准
- 功能价值比:复杂度与实际功能价值的比例
- 维护成本:新增代码对整体维护成本的影响
- 理解难度:新贡献者理解代码的难度
- 扩展性需求:是否真的需要当前设计的扩展性
复杂度指标
interface ComplexityChecklist {
hasClearPurpose: boolean;
solvesRealProblem: boolean;
necessaryAbstraction: boolean;
maintainableCode: boolean;
futureProofing: boolean;
unnecessaryPatterns: boolean;
overConfiguration: boolean;
prematureOptimization: boolean;
}
3. 实用性验证
验证代码实现的实用性,确保解决实际问题。
实用性检查
- 问题匹配:代码是否解决了实际的用户问题
- 功能必要性:每个功能模块是否都必要
- 接口设计:API 设计是否简洁实用
- 错误处理:错误处理是否实用而非过度
实用性示例
try {
const result = await apiCall();
if (result !== null && result !== undefined) {
if (typeof result === 'object' && result.data) {
}
}
} catch (error) {
if (error instanceof NetworkError) {
} else if (error instanceof ValidationError) {
}
}
try {
const result = await apiCall();
return result;
} catch (error) {
console.error('API调用失败:', error);
throw new Error('服务不可用');
}
4. 架构合理性验证
确保架构设计有实际意义,避免不必要的抽象层。
架构检查项
- 模块职责:每个模块是否有明确的职责
- 分层必要性:每一层抽象是否真的必要
- 接口设计:接口是否简洁实用
- 依赖关系:依赖关系是否合理且必要
使用方法
基础过度设计检查
请检查当前的代码变更,是否存在过度设计的问题?
功能必要性评估
请评估这个新功能的实现是否符合"如无必要勿增实体"的原则?
架构合理性检查
请检查当前的架构设计是否合理,是否存在不必要的抽象层?
复杂度优化建议
请分析这段代码的复杂度,并提供简化建议。
实用原则指导
何时考虑复杂设计
- 实际遇到问题:当确实出现性能瓶颈时
- 功能需求:当用户明确需要相关功能时
- 维护困难:当代码确实难以维护时
- 团队协作:当多人协作需要统一接口时
何时保持简单
- 预防性设计:为了"可能的需要"而增加复杂度
- 理论完美:为了代码的"优雅"而过度抽象
- 过度优化:在没有性能问题时优化性能
- 设计模式:为了使用设计模式而使用
务实开发检查清单
设计阶段检查
实现阶段检查
代码审查检查
最佳实践
简单直接的设计
class ConfigManager {
private config: Config;
constructor(configPath: string) {
this.config = this.loadConfig(configPath);
}
get(key: string): any {
return this.config[key];
}
set(key: string, value: any): void {
this.config[key] = value;
}
}
避免的过度设计
abstract class ConfigurationProvider<T extends ConfigurationOptions> {
abstract getConfiguration(): Promise<Configuration<T>>;
abstract validateConfiguration(config: Configuration<T>): ValidationResult;
abstract transformConfiguration(config: Configuration<T>): TransformedConfiguration<T>;
}
class JSONConfigurationProvider<T extends JSONConfigurationOptions>
extends ConfigurationProvider<T> {
}
通过这个技能的帮助,可以确保 xiaozhi-client 项目始终保持务实的设计理念,避免过度工程化,专注解决实际问题。