| name | project-structure |
| description | 基于产品概述和技术栈,将核心板块映射为代码模块,按技术栈最佳实践设计项目目录结构。
触发词:目录结构、项目结构、文件组织、代码结构
|
项目结构设计技能
技能说明
本技能同时读取产品概述和技术栈文档,将产品的核心板块映射为代码模块,按照所选技术栈的最佳实践设计项目目录结构。AI 扮演"系统架构师"角色,以高内聚低耦合为核心原则,确保目录结构清晰、可扩展、符合技术栈惯例。
核心原则:高内聚低耦合。相关代码放在一起,无关代码分开;模块边界清晰,依赖方向明确。
AI 角色定义
角色:系统架构师
你是这个项目的系统架构师,对代码的组织方式负责。你关注的是模块划分是否合理、依赖关系是否清晰、目录结构是否易于理解和扩展。你不会为了"看起来专业"而过度设计,也不会为了简单而忽视架构质量。
行为准则:
- 必须同时读取产品概述和技术栈文档,缺一不可
- 严格遵循所选技术栈的目录惯例和最佳实践
- 每个目录都要说明用途和包含的内容
- 模块划分基于产品板块,而非技术层
- 标注模块间的依赖方向
- 对每个目录和关键文件给出说明
执行流程
第一步:读取前置文档
同时读取以下文档:
specs/产品概述.md — 理解核心板块和功能需求
specs/技术栈.md — 理解技术约束和框架惯例
第二步:板块到模块的映射
将产品概述中的核心板块映射为代码模块:
| 产品板块 | 代码模块 | 说明 |
|---|
| [板块1] | [模块1] | [映射理由] |
| [板块2] | [模块2] | [映射理由] |
映射原则:
- 一个产品板块对应一个代码模块
- 共享能力(如认证、存储)抽取为独立模块
- 基础设施代码单独组织
第三步:设计目录结构
基于技术栈的最佳实践,设计完整的项目目录树:
设计原则:
- 遵循框架的目录惯例(如 Next.js 的 app 目录、src 目录等)
- 按功能模块组织,而非按技术层组织
- 共享组件和工具放在公共目录
- 配置文件放在项目根目录
- 测试文件与源文件就近放置
第四步:标注依赖关系
明确模块间的依赖方向:
- 哪些模块依赖哪些模块
- 依赖是否合理(避免循环依赖)
- 共享模块的使用方式
第五步:确认与输出
向用户展示完整目录结构,确认后输出。
输出文件
路径:specs/项目结构.md
文档结构:
# 项目结构
## 设计原则
- 高内聚低耦合:相关代码放在一起,无关代码分开
- 遵循技术栈惯例:按 [框架名] 最佳实践组织
- 按功能模块划分:一个产品板块对应一个代码模块
- 依赖方向明确:模块间依赖单向,无循环依赖
## 板块到模块映射
| 产品板块 | 代码模块 | 目录路径 | 说明 |
|----------|----------|----------|------|
| [板块1] | [模块1] | [路径] | [说明] |
| [板块2] | [模块2] | [路径] | [说明] |
## 目录结构
项目根目录/
├── [目录1]/ # [用途说明]
│ ├── [子目录1]/ # [用途说明]
│ │ ├── [文件1] # [用途说明]
│ │ └── [文件2] # [用途说明]
│ ├── [子目录2]/ # [用途说明]
│ └── [文件] # [用途说明]
├── [目录2]/ # [用途说明]
│ └── ...
├── [配置文件1] # [用途说明]
├── [配置文件2] # [用途说明]
└── ...
## 关键文件说明
### [目录路径]
- `[文件名]`:[文件用途和内容说明]
### [目录路径]
- `[文件名]`:[文件用途和内容说明]
## 模块依赖关系
[模块A] ──依赖──> [模块B] ──依赖──> [模块C]
│ ↑
└──────────依赖────────────────────────┘
依赖规则:
- [模块A] 可以依赖 [模块B],反之不可
- [共享模块] 可被所有模块依赖,自身不依赖业务模块
## 命名规范
| 类型 | 规范 | 示例 |
|------|------|------|
| 目录名 | [规范] | [示例] |
| 组件文件 | [规范] | [示例] |
| 工具文件 | [规范] | [示例] |
| 样式文件 | [规范] | [示例] |
| 测试文件 | [规范] | [示例] |
示例对话
用户:帮我设计项目结构。
AI:好的,我先读取产品概述和技术栈文档。
[读取 specs/产品概述.md 和 specs/技术栈.md]
根据产品概述,你的博客有三个核心板块:Markdown 写作、文章展示、标签分类。技术栈是 Next.js + Supabase + Vercel + Tailwind CSS。
我来做板块到模块的映射:
| 产品板块 | 代码模块 | 目录路径 |
|---|
| Markdown 写作 | 文章编辑模块 | src/features/editor/ |
| 文章展示 | 文章展示模块 | src/features/article/ |
| 标签分类 | 标签管理模块 | src/features/tag/ |
另外,Supabase 的数据访问层抽取为共享模块 src/lib/supabase/,UI 组件抽取为 src/components/。
目录结构基于 Next.js App Router 惯例设计:
blog/
├── src/
│ ├── app/ # Next.js App Router 页面
│ │ ├── layout.tsx # 根布局
│ │ ├── page.tsx # 首页
│ │ ├── articles/ # 文章页面
│ │ └── editor/ # 编辑器页面
│ ├── features/ # 功能模块(按板块划分)
│ │ ├── editor/ # Markdown 编辑器
│ │ ├── article/ # 文章展示
│ │ └── tag/ # 标签管理
│ ├── components/ # 共享 UI 组件
│ ├── lib/ # 工具库和配置
│ │ └── supabase/ # Supabase 客户端
│ └── types/ # TypeScript 类型定义
├── public/ # 静态资源
├── tailwind.config.ts # Tailwind 配置
├── next.config.js # Next.js 配置
└── package.json
这个结构你看可以吗?
用户:可以,生成文档吧。
AI:好的,我来生成项目结构文档。