关于 solid-nextjs
为 Next.js 16 项目提供 SOLID 与 DRY 架构指导,面向希望统一代码组织和质量规范的开发者。技能包含原则参考、代码模板及编码前调研和代码库检查流程。
主要功能
- 01规定文件长度与模块结构
- 02将类型放在独立 interfaces 目录
- 03要求导出项编写 JSDoc
- 04提供五项 SOLID 原则指南
- 05提供 23 种代码模板
适用场景
- 01规划 Next.js 功能模块与核心目录
- 02拆分过长的页面和组件
- 03为服务、钩子和 API 路由选用模板
- 04编码前检查文档与现有代码
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ fusengine/ agents --skill solid-nextjs安装后在 Claude Code 中输入/solid-nextjs确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/architecture-patterns.mddependency-inversion.mdinterface-segregation.mdliskov-substitution.mdopen-closed.mdsingle-responsibility.mdsolid-principles.mdreferences/templates/action.mdadapter.mdapi-route.mdclient-component.mderror.mdfactory.mdhook.mdi18n.mdinterface.mdmiddleware.mdprisma.mdquery.mdserver-component.mdservice.mdstore.mdtest.mdvalidator.md详细介绍
为 SOLID 的每个字母提供专属参考指南(SRP 文件拆分、OCP 组合/插件模式、LSP 契约合规、ISP 基于角色的接口、DIP 构造函数注入/工厂),另有 23 个可直接复制的模板,涵盖组件、钩子、服务、存储、服务器操作、API 路由、验证器、Prisma 单例、i18n 和查询。这是一项横切代码质量技能,而非功能技能——框架 API 本身请参阅 nextjs-16 及其同系列技能。
SOLID Next.js - 模块化架构
当前日期(重要)
今天是 2026 年 1 月——搜索时始终使用当前年份。 搜索时使用「2025」或「2026」,绝不使用过去的年份。
强制要求:编码前先研究
重要:先查看今天的日期,然后在编写任何代码之前搜索文档和网页。
- 使用 Context7 查询 Next.js/React 官方文档
- 使用 Exa 网页搜索,并使用当前年份查找最新趋势
- 查看当年的 Vercel Blog,了解新功能
- 确认软件包版本与 Next.js 16 的兼容性
搜索查询(将 YYYY 替换为当前年份):
Next.js [feature] YYYY best practicesReact 19 [component] YYYYTypeScript [pattern] YYYYPrisma 7 [feature] YYYY
代码库分析(强制要求)
在进行任何实现之前:
- 探索项目结构,了解架构
- 阅读现有的相关文件,遵循既有模式
- 确定使用的命名规范、编码风格和模式
- 了解数据流和依赖关系
DRY - 复用或创建共享代码(强制要求)
编写任何新代码之前:
- 在代码库中使用 grep 搜索类似的函数名称、模式或逻辑
- 检查共享位置:
modules/cores/lib/、modules/cores/components/、modules/cores/hooks/ - 如果存在类似代码 → 扩展或复用,而不是重复创建
- 如果代码将用于 2 个或更多功能 → 直接在
modules/cores/中创建 - 将重复出现 3 次或更多的逻辑提取为共享辅助函数
- 创建新文件后运行
npx jscpd ./src --threshold 3
Agent 工作流(强制要求)
在进行任何实现之前,并行启动 3 个 Agent,每个调用一次 Agent,并提供 name:
- fuse-ai-pilot:explore-codebase - 分析项目结构和现有模式
- fuse-ai-pilot:research-expert - 核实技术栈中所有技术的最新文档
- mcp__context7__query-docs - 检查集成兼容性
实现完成后,运行 fuse-ai-pilot:sniper 进行验证。
绝对规则(强制要求)
1. 文件少于 100 行
- 90 行时拆分——绝不超过 100 行
- 页面组件少于 50 行(使用组合)
- 服务器组件少于 80 行
- 客户端组件少于 60 行
- 每个服务器操作少于 30 行
2. 模块化架构
完整结构(含功能模块和 cores 目录)请参阅 references/architecture-patterns.md。
3. JSDoc 为强制要求
/**
* Fetch user by ID from database.
*
* @param id - User unique identifier
* @returns User object or null if not found
* @throws DatabaseError on connection failure
*/
export async function getUserById(id: string): Promise<User | null>
4. 接口分离
modules/auth/src/
├── interfaces/ # Types ONLY
│ ├── user.interface.ts
│ └── session.interface.ts
├── services/ # NO types here
└── components/ # NO types here
SOLID 原则(详细指南)
每项 SOLID 原则都有专门的参考指南:
-
references/single-responsibility.md- 一个类/函数 = 一个变更理由- 在 90 行处拆分文件(页面 < 50 行、组件 < 60 行、服务 < 80 行)
- 组件组合模式
- Next.js 页面和服务器操作示例
-
references/open-closed.md- 通过组合扩展,而不是修改- 插件架构模式
- 多种实现的提供者模式
- 适配器和策略模式
- 在不更改现有代码的情况下添加功能
-
references/liskov-substitution.md- 契约合规性和行为子类型- 子类型必须可替代基类型
- 异常和返回类型契约
- 测试 LSP 合规性
-
references/interface-segregation.md- 多个精简接口胜过一个臃肿接口- 基于角色的接口
- 避免臃肿的契约
- 面向客户端的接口
-
references/dependency-inversion.md- 依赖抽象,而非实现- 构造函数注入模式
- 用于创建对象的工厂模式
- IoC 容器
- 便于在测试中使用模拟对象
概览和速查指南请参阅 references/solid-principles.md。
代码模板
references/templates/ 中提供可直接复制的代码:
| 模板 | 用途 |
|---|---|
server-component.md | 带数据获取的服务器组件 |
client-component.md | 带钩子的客户端组件 |
service.md | 使用依赖注入的服务 |
hook.md | 带状态的 React 钩子 |
interface.md | TypeScript 接口 |
store.md | 带持久化功能的 Zustand 存储 |
action.md | 带验证的服务器操作 |
api-route.md | API 路由处理程序 |
validator.md | Zod 验证模式 |
factory.md | 工厂模式 |
adapter.md | 适配器模式 |
error.md | 自定义错误类 |
test.md | 测试模板 |
middleware.md | 身份验证中间件 |
prisma.md | Prisma 单例 |
i18n.md | 功能/全局翻译 |
query.md | 数据库查询(Prisma 7) |
回复指南
- 先研究 - 必须:在编写任何代码之前,先搜索 Context7 + Exa
- 展示完整代码 - 提供可运行的示例,而非代码片段
- 解释决策 - 说明为何选择此模式而非其他方案
- 包含测试 - 始终建议测试用例
- 处理错误 - 切勿忽略错误,使用错误边界
- 为所有内容添加类型 - 使用完整的 TypeScript,不使用
any - 记录代码 - 为复杂函数编写 JSDoc
禁止事项
- ❌ 未先研究文档就编写代码(务必先研究)
- ❌ 未查阅当年最新文档就使用过时 API
- ❌ 文件 > 100 行
- ❌ 在组件文件中定义接口
- ❌ 在
app/页面中编写业务逻辑 - ❌ 在组件中直接调用数据库
- ❌ 一个模块导入另一个模块(核心模块除外)
- ❌ 默认使用
'use client' - ❌ 使用
useEffect获取数据 - ❌ 导出内容缺少 JSDoc
- ❌
any类型 - ❌ 聚合导出
- ❌ 未先使用 Grep 搜索,就重复编写已有的工具函数/辅助函数
- ❌ 复制粘贴逻辑代码块,而不是提取共享函数