vibe-coding-cn/assets/documents/principles/fundamentals/通用项目架构模板.md

696 lines
17 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 通用项目架构模板
## 1⃣ Python Web/API 项目标准结构
```
项目名称/
├── README.md # 项目说明文档
├── LICENSE # 开源协议
├── requirements.txt # 依赖管理pip
├── pyproject.toml # 现代Python项目配置推荐
├── setup.py # 包安装脚本(如果做成库)
├── .gitignore # Git忽略文件
├── .env # 环境变量不提交到Git
├── .env.example # 环境变量示例
├── CLAUDE.md # claude持久上下文
├── AGENTS.md # codex持久上下文
├── Sublime-Text.txt # 放需求和注意事项给自己看的和cli的会话恢复指令^_^
├── docs/ # 文档目录
│ ├── api.md # API文档
│ ├── development.md # 开发指南
│ └── architecture.md # 架构说明
├── scripts/ # 脚本工具
│ ├── deploy.sh # 部署脚本
│ ├── backup.sh # 备份脚本
│ └── init_db.sh # 数据库初始化
├── tests/ # 测试代码
│ ├── __init__.py
│ ├── conftest.py # pytest配置
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ └── test_config.py # 配置测试
├── src/ # 源代码(推荐方式)
│ ├── __init__.py
│ ├── main.py # 程序入口
│ ├── app.py # Flask/FastAPI应用
│ ├── config.py # 配置管理
│ │
│ ├── core/ # 核心业务逻辑
│ │ ├── __init__.py
│ │ ├── models/ # 数据模型
│ │ ├── services/ # 业务服务
│ │ └── utils/ # 工具函数
│ │
│ ├── api/ # API接口层
│ │ ├── __init__.py
│ │ ├── v1/ # 版本1
│ │ └── dependencies.py
│ │
│ ├── data/ # 数据处理
│ │ ├── __init__.py
│ │ ├── repository/ # 数据访问层
│ │ └── migrations/ # 数据库迁移
│ │
│ └── external/ # 外部服务
│ ├── __init__.py
│ ├── clients/ # API客户端
│ └── integrations/ # 集成服务
├── logs/ # 日志目录不提交到Git
│ ├── app.log
│ └── error.log
└── data/ # 数据目录不提交到Git
├── raw/ # 原始数据
├── processed/ # 处理后的数据
└── cache/ # 缓存
```
**使用场景**Flask/FastAPI Web应用、RESTful API服务、Web后端
---
## 2⃣ 数据科学/量化项目标准结构
```
项目名称/
├── README.md
├── LICENSE
├── requirements.txt
├── .gitignore
├── .env
├── .env.example
├── CLAUDE.md # claude持久上下文
├── AGENTS.md # codex持久上下文
├── Sublime-Text.txt # 放需求和注意事项给自己看的和cli的会话恢复指令^_^
├── docs/ # 文档目录
│ ├── notebooks/ # Jupyter文档
│ └── reports/ # 分析报告
├── notebooks/ # Jupyter Notebook
│ ├── 01_data_exploration.ipynb
│ ├── 02_feature_engineering.ipynb
│ └── 03_model_training.ipynb
├── scripts/ # 脚本工具
│ ├── train_model.py # 训练脚本
│ ├── backtest.py # 回测脚本
│ ├── collect_data.py # 数据采集
│ └── deploy_model.py # 模型部署
├── tests/ # 测试
│ ├── test_data/
│ └── test_models/
├── configs/ # 配置文件
│ ├── model.yaml
│ ├── database.yaml
│ └── trading.yaml
├── src/ # 源代码
│ ├── __init__.py
│ │
│ ├── data/ # 数据处理模块
│ │ ├── __init__.py
│ │ ├── collectors/ # 数据采集器
│ │ ├── processors/ # 数据清洗
│ │ ├── features/ # 特征工程
│ │ └── loaders.py # 数据加载
│ │
│ ├── models/ # 模型模块
│ │ ├── __init__.py
│ │ ├── strategies/ # 交易策略
│ │ ├── backtest/ # 回测引擎
│ │ └── risk/ # 风险管理
│ │
│ ├── utils/ # 工具模块
│ │ ├── __init__.py
│ │ ├── logging.py # 日志配置
│ │ ├── database.py # 数据库工具
│ │ └── api_client.py # API客户端
│ │
│ └── core/ # 核心模块
│ ├── __init__.py
│ ├── config.py # 配置管理
│ ├── signals.py # 信号生成
│ └── portfolio.py # 投资组合
├── data/ # 数据目录Git忽略
│ ├── raw/ # 原始数据
│ ├── processed/ # 处理后数据
│ ├── external/ # 外部数据
│ └── cache/ # 缓存
├── models/ # 模型文件Git忽略
│ ├── checkpoints/ # 检查点
│ └── exports/ # 导出模型
└── logs/ # 日志Git忽略
├── trading.log
└── errors.log
```
**使用场景**量化交易、机器学习、数据分析、AI研究
---
## 3⃣ Monorepo多项目仓库标准结构
```
项目名称-monorepo/
├── README.md
├── LICENSE
├── .gitignore
├── .gitmodules # Git子模块
├── docker-compose.yml # Docker编排
├── CLAUDE.md # claude持久上下文
├── AGENTS.md # codex持久上下文
├── Sublime-Text.txt # 这个是文件放需求和注意事项给自己看的和cli的会话恢复指令^_^
├── docs/ # 全局文档
│ ├── architecture.md
│ └── deployment.md
├── scripts/ # 全局脚本
│ ├── build_all.sh
│ ├── test_all.sh
│ └── deploy.sh
├── backups/ # 放备份文件
│ ├── archive/ # 放旧的备份文件
│ └── gz/ # 放备份文件的gz
├── services/ # 微服务目录
│ │
│ ├── user-service/ # 用户服务
│ │ ├── Dockerfile
│ │ ├── requirements.txt
│ │ ├── src/
│ │ └── tests/
│ │
│ ├── trading-service/ # 交易服务
│ │ ├── Dockerfile
│ │ ├── requirements.txt
│ │ ├── src/
│ │ └── tests/
│ ...
│ └── data-service/ # 数据服务
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── src/
│ └── tests/
├── assets/ # 资产中心
│ ├── common/ # 公共模块
│ │ ├── utils/
│ │ └── models/
│ ├── repo/ # 外部仓库中心(不可修改,只调用)
│ └── database/ # 数据库相关
├── infrastructure/ # 基础设施
│ ├── terraform/ # 云资源定义
│ ├── kubernetes/ # K8s配置
│ └── nginx/ # 反向代理配置
└── monitoring/ # 监控系统
├── prometheus/ # 指标收集
├── grafana/ # 可视化
└── alertmanager/ # 告警
```
**使用场景**:微服务架构、大型项目、团队协作
---
## 4⃣ Full-Stack Web 应用标准结构
```
项目名称/
├── README.md
├── LICENSE
├── .gitignore
├── docker-compose.yml # 前后端一起编排
├── CLAUDE.md # claude持久上下文
├── AGENTS.md # codex持久上下文
├── Sublime-Text.txt # 放需求和注意事项给自己看的和cli的会话恢复指令^_^
├── frontend/ # 前端目录
│ ├── public/ # 静态资源
│ ├── src/ # 源码
│ │ ├── components/ # React/Vue组件
│ │ ├── pages/ # 页面
│ │ ├── store/ # 状态管理
│ │ └── utils/ # 工具
│ ├── package.json # NPM依赖
│ └── vite.config.js # 构建配置
└── backend/ # 后端目录
├── requirements.txt
├── Dockerfile
├── src/
│ ├── api/ # API接口
│ ├── core/ # 业务逻辑
│ │ └── models/ # 数据模型
└── tests/
```
**使用场景**全栈应用、SPA单页应用、前后端分离项目
---
## 📌 核心设计原则
### 1. 关注点分离Separation of Concerns
```
API → 服务 → 数据访问 → 数据库
一目了然,层级清晰
```
### 2. 可测试性Testability
```
每个模块可独立测试
依赖可mock
```
### 3. 可配置性Configurability
```
配置与代码分离
环境变量 > 配置文件 > 默认值
```
### 4. 可维护性Maintainability
```
代码自解释
合理的文件命名
清晰的目录结构
```
### 5. 版本控制友好Git-Friendly
```
data/、logs/、models/ 添加到 .gitignore
只提交源代码和配置示例
```
---
## 🎯 最佳实践建议
1. **使用 `src/` 目录**把源代码放在专门的src目录避免顶级目录混乱
2. **相对导入**:统一使用 `from src.module import thing` 的导入方式
3. **测试覆盖**:保证核心业务逻辑有单元测试和集成测试
4. **文档先行**重要模块都要写README.md说明
5. **环境隔离**使用virtualenv或conda创建独立环境
6. **依赖明确**所有依赖都写入requirements.txt并锁定版本
7. **配置管理**:使用环境变量 + 配置文件的组合方式
8. **日志分级**DEBUG、INFO、WARNING、ERROR、FATAL
9. **错误处理**:不要吞掉异常,要有完整的错误链
10. **代码规范**使用black格式化flake8检查
---
## 🔥 .gitignore 推荐模板
```gitignore
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
*.egg-info/
dist/
build/
# 环境
.env
.venv/
env/
venv/
ENV/
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# 数据
data/
*.csv
*.json
*.db
*.sqlite
*.duckdb
# 日志
logs/
*.log
# 模型
models/
*.h5
*.pkl
# 临时文件
tmp/
temp/
*.tmp
.DS_Store
```
---
## 📚 技术选型参考
| 场景 | 推荐技术栈 |
|-----|----------|
| Web API | FastAPI + Pydantic + SQLAlchemy |
| 数据处理 | Pandas + NumPy + Polars |
| 机器学习 | Scikit-learn + XGBoost + LightGBM |
| 深度学习 | PyTorch + TensorFlow |
| 数据库 | PostgreSQL + Redis |
| 消息队列 | RabbitMQ / Kafka |
| 任务队列 | Celery |
| 监控 | Prometheus + Grafana |
| 部署 | Docker + Docker Compose |
| CI/CD | GitHub Actions / GitLab CI |
---
## 📝 文件模板示例
### requirements.txt
```txt
# 核心依赖
fastapi==0.104.1
uvicorn[standard]==0.24.0
pydantic==2.5.0
# 数据库
sqlalchemy==2.0.23
alembic==1.12.1
psycopg2-binary==2.9.9
# 测试
pytest==7.4.3
pytest-cov==4.1.0
pytest-asyncio==0.21.1
# 工具
python-dotenv==1.0.0
loguru==0.7.2
# 开发(可选)
black==23.11.0
flake8==6.1.0
mypy==1.7.1
```
### pyproject.toml现代Python项目推荐
```toml
[project]
name = "项目名称"
version = "0.1.0"
description = "项目描述"
authors = [{name = "作者", email = "邮箱@example.com"}]
dependencies = [
"fastapi>=0.104.0",
"uvicorn[standard]>=0.24.0",
"sqlalchemy>=2.0.0",
]
[project.optional-dependencies]
dev = ["pytest", "black", "flake8", "mypy"]
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
```
---
## ✅ 新项目检查清单
启动新项目时,确保完成以下事项:
- [ ] 创建README.md包含项目简介和使用说明
- [ ] 创建LICENSE文件明确开源协议
- [ ] 设置Python虚拟环境venv/conda
- [ ] 创建requirements.txt并锁定依赖版本
- [ ] 创建.gitignore排除敏感和不必要的文件
- [ ] 创建.env.example说明需要的环境变量
- [ ] 设计目录结构,符合关注点分离原则
- [ ] 创建基础的配置文件
- [ ] 设置代码格式化工具black
- [ ] 设置代码检查工具flake8/ruff
- [ ] 编写第一个测试用例
- [ ] 设置Git仓库并提交初始代码
- [ ] 创建CHANGELOG.md记录版本变更
---
在**编程 / 软件开发**里,**项目架构Project Architecture / Software Architecture**指的是:
> **一个项目在“整体层面”是如何被拆分、组织、通信和演进的设计方案**
> ——它决定了代码怎么分层、模块怎么分工、数据怎么流动、系统如何扩展和维护。
---
## 一句话理解
**项目架构 = 不写具体业务代码之前,就先决定“代码怎么放、模块怎么连、职责怎么分”。**
---
## 一、项目架构主要解决什么问题?
项目架构不是“写代码的技巧”,而是解决这些**更高层问题**
* 📦 代码怎么组织才不乱?
* 🔁 模块之间怎么通信?
* 🧱 哪些地方可以独立修改而不影响全局?
* 🚀 项目以后怎么扩展?
* 🧪 如何方便测试、调试、部署?
* 👥 多人协作如何不互相踩代码?
---
## 二、项目架构一般包含哪些内容?
### 1⃣ 目录结构(最直观)
```text
project/
├── src/
│ ├── main/
│ ├── services/
│ ├── models/
│ ├── utils/
│ └── config/
├── tests/
├── docs/
└── README.md
```
👉 决定 **“不同类型代码放哪里”**
---
### 2⃣ 分层设计(核心)
最常见的是 **分层架构Layered Architecture**
```text
表示层UI / API
业务逻辑层Service
数据访问层DAO / Repository
数据库 / 外部系统
```
**规则:**
* 上层可以调用下层
* 下层不能反过来依赖上层
---
### 3⃣ 模块划分(职责边界)
比如一个交易系统:
```text
- market_data # 行情
- strategy # 策略
- risk # 风控
- order # 下单
- account # 账户
```
👉 每个模块:
* 只做一类事情
* 尽量低耦合、高内聚
---
### 4⃣ 数据与控制流
* 数据从哪里来?
* 谁负责处理?
* 谁负责存储?
* 谁负责对外输出?
例如:
```text
WebSocket → 数据清洗 → 指标计算 → AI评分 → SQLite → API → 前端
```
---
### 5⃣ 技术选型(架构的一部分)
* 编程语言Python / Java / Go
* 框架FastAPI / Spring / Django
* 通信方式HTTP / WebSocket / MQ
* 存储SQLite / Redis / PostgreSQL
* 部署(本地 / Docker / 云)
---
## 三、常见项目架构类型(入门必懂)
### 1⃣ 单体架构Monolith
```text
一个项目,一个进程
```
**适合:**
* 个人项目
* 原型
* 小系统
**优点:**
* 简单
* 好调试
**缺点:**
* 后期难扩展
---
### 2⃣ 分层架构(最常见)
```text
Controller → Service → Repository
```
**适合:**
* Web 后端
* 业务系统
---
### 3⃣ 模块化架构
```text
core + plugins
```
**适合:**
* 可插拔系统
* 策略 / 指标系统
👉 **你做量化、AI分析非常适合这个**
---
### 4⃣ 微服务架构(进阶)
```text
每个服务一个独立进程 + API 通信
```
**适合:**
* 大团队
* 高并发
* 长期演进
**新手不建议一开始用**
---
## 四、用一个“真实例子”理解(贴近你现在做的)
假设你做 **币安永续 AI 分析系统**
```text
backend/
├── data/
│ └── binance_ws.py # 行情订阅
├── indicators/
│ └── vpvr.py
├── strategy/
│ └── signal_score.py
├── storage/
│ └── sqlite_writer.py
├── api/
│ └── http_server.py
└── main.py
```
这就是**项目架构设计**
* 每个文件夹只负责一件事
* 可替换、可测试
* 后面想接 Telegram Bot / Web 前端都不用重写核心
---
## 五、初学者常见误区 ⚠️
❌ 一开始就搞微服务
❌ 所有代码写在一个文件
❌ 架构追求“高级感”,而不是“可维护”
❌ 没想清楚数据流就开始写
---
## 六、学习路线建议(很重要)
你现在学 CS很推荐这个顺序
1. **先写能跑的项目(不完美)**
2. **代码开始乱 → 才学架构**
3. 学会:
* 模块拆分
* 分层
* 依赖方向
4. 再学:
* 设计模式
* 微服务 / 消息队列
---
**版本**: 1.0
**更新日期**: 2025-11-24
**维护**: CLAUDECODEXKIMI