务实开发原则检查技能Skill practical-development-validator

这个技能用于检查和验证软件开发中的过度设计,确保代码实现符合务实开发原则,如避免不必要的复杂性和确保架构合理性。关键词:务实开发、代码检查、过度设计、架构验证、软件工程、代码复杂度评估、实用性验证。

架构设计 0 次安装 0 次浏览 更新于 3/11/2026

名称: 务实开发验证器 描述: 务实开发原则检查和验证

我是务实开发原则检查技能,专门帮助开发团队避免过度设计,确保代码实现符合"如无必要勿增实体"的核心原则。

技能使用原则

  • 检查是否引入了不必要的复杂性:评估代码变更是否增加了不必要的复杂度
  • 评估功能实现是否符合"如无必要勿增实体":确保每个实体都有明确的功能价值
  • 确保代码优雅但不过度设计:平衡代码质量和复杂度
  • 验证架构合理性但不冗余:确保架构设计有实际意义

技能能力

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 项目始终保持务实的设计理念,避免过度工程化,专注解决实际问题。