SuperAPI AI 工具集

cohesion

前端与建站

查看项目

更新于 10-16 04:41

技能介绍

用途

这份资料是一份前端代码质量指南,主题是「凝聚度(Cohesion)」。它的核心原则是:一起被修改的代码,应该放在一起。当出现「修改一个功能却要同时改动多个目录」「同一个数字或常量散落在多个文件」「import 路径长到 ../../..」这类信号时,就说明代码的凝聚度可能出了问题。

主要能力

资料给出了两类核心模式:

1. 把一起修改的文件放在同一目录

反例是按「种类」分离,导致依赖关系难以把握:

src/
├── components/UserForm.tsx
├── hooks/useUserValidation.ts
├── types/userTypes.ts
└── api/userApi.ts

推荐做法是按「领域」组织:

src/
├── components/   # 全局共享
└── domains/User/ # User 相关代码集中
    ├── UserForm.tsx
    ├── useUserValidation.ts
    ├── types.ts
    └── api.ts

2. 消除魔法数字

同一个数字出现在多处时,只改其中一处就会产生 bug。

反例(分散):

// Pagination.tsx
const pages = Math.ceil(total / 20);
// useItems.ts
const offset = (page - 1) * 20;

推荐做法(统一为常量):

export const PAGE_SIZE = 20;
import { PAGE_SIZE } from './constants';

快速参考

资料提供了一张「代码坏味道 → 改进方法」的对照表:

  • 同一个魔法数字出现在 3 处以上 → 抽取为共享常量
  • 一个功能要同时修改 components/、hooks/、types/ → 放到 domains/featureName/ 下
  • 出现很长的相对路径 ../../.. → 把文件放得更近
  • 类型定义离使用处太远 → 与使用它的代码放在一起

适用场景

适合在前端项目中进行目录结构设计与重构时参考,尤其是当项目按技术类型(组件、hooks、类型、API)分层,导致跨目录改动频繁、依赖关系不清晰时。

限制与例外

资料明确指出,并非所有重复都应消除,以下情况「重复反而更好」:

  • 两个功能未来很可能朝不同方向演进时
  • 共享会引入不想要的依赖关系时
  • 共享代码不足 5 行、本身足够简单时

补充说明

资料引用的参考链接为:https://frontend-fundamentals.com/code-quality/cohesive/ 。关于该指南的收费、平台支持范围、具体工具链集成方式等信息,资料中暂未提供。