Files
Inbox/Go项目实战/00_顶层设计/关于个人开发者的开发模式.md

110 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

2025-12-11 07:24:36 +08:00
---
tags: []
aliases:
- 渐进式开发最佳实践
date created: 星期一, 十二月 8日 2025, 12:04:31 凌晨
date modified: 星期一, 十二月 8日 2025, 12:05:12 凌晨
---
# 渐进式开发最佳实践
## 1. 必须在写代码前锁定的“硬约束” (The Non-Negotiables)
即使是后规划细节,但这 **4 样东西** 是一旦开工就很难改的,必须在骨架阶段定死:
1. **目录结构 (Directory Layout):** `cmd`, `internal`, `pkg` 怎么分。这决定了你能不能顺畅地加代码。
- _现状:_ 我们已经定好了 (Modular Clean Architecture)。
2. **核心技术栈与基础设施:** 选 Gin 还是 Echo用 GORM 还是 SQLX依赖注入用 Wire 还是手写。
- _现状:_ 我们已经定好了 (Gin+GORM+Wire+Viper)。
3. **统一的交互规范:** API 怎么返回错误?数据库怎么管理变更?日志打在哪里?
- _现状:_ 我们已经定好了 (JSON Envelope, Golang-Migrate, Zap)。
4. **核心领域模型 (Core Schema):** 最关键的表User, Role
- _原因:_ 它们是系统的地基,地基不稳,后面写 Service 逻辑会反复推倒重来。
---
## 2. 可以(且应该)推迟设计的“软逻辑” (The Deferrables)
这些内容不要现在想,想了也是白想,等写到那个函数时再具体的“具体问题具体分析”:
1. **复杂的业务算法:** 比如“文章的热度排名算法”、“复杂的权限递归校验逻辑”。
- _策略:_ 先写个 `return true` 或简单的逻辑占位,跑通流程再说。
2. **极致的性能优化:** 比如“这里要不要加 Redis 缓存?”、“这里 SQL 要不要分表?”。
- _策略:_ 先跑通功能 (Make it work),再优化性能 (Make it fast)。
3. **非核心字段的定义:** 比如文章表里要不要加 `seo_keywords`,用户表要不要加 `wechat_id`
- _策略:_ 用到了再加 migration不要为了“未来可能用到”而过度设计。
4. **具体的 API 参数细节:** 比如“更新文章是传 ID 还是传 UUID”。
- _策略:_ 写 Handler 的时候,顺手定义 DTO 就行。
---
## 3. 个人开发者的“曳光弹”开发流 (The Tracer Bullet Workflow)
不要试图“横向”开发(先把所有 50 张表设计完,再把所有 API 定义完)。
要进行 “纵向”切片开发Vertical Slice
**推荐的实操步骤:**
### 第一阶段:搭建“行走的骨架” (Day 1 - 也就是你现在该做的)
**目标:** 一个能跑起来、能连数据库、有日志、有 Swagger 文档,但没有任何业务功能的空壳。
1. **初始化项目:** 建立文件夹,`go mod init`
2. **配置基础设施:** 放入 `Makefile`, `docker-compose.yml`, `config.yaml`
3. **连通性测试:** 写一个简单的 `GET /ping` 接口,确保能读到配置,能连上 DB能打出日志。
4. **依赖注入跑通:** 确保 `wire` 能自动生成代码并启动 Server。
5. **结果:** 你拥有了一个**“生产级”的 Hello World**。
### 第二阶段:第一个“核心切片” (Day 2-3)
**目标:** 打通 User 模块的完整闭环。
1. **DB:** 设计 `users` 表,执行 Migrate。
2. **Entity:** 生成 User Struct。
3. **Repo:**`CreateUser``FindUser` 的 CRUD。
4. **Service:**`Register` 逻辑(这里涉及到密码加密,此时再去查 Argon2 怎么用)。
5. **API:** 定义 `RegisterReq` DTO写 Handler。
6. **测试:** 用 Postman/Swagger 调通注册接口。
### 第三阶段:具体问题具体分析 (Day 4+)
**目标:** 遇到什么写什么。
- _场景:_ 比如你做到了“文章发布”,突然发现需要“敏感词过滤”。
- _动作:_ 停下来,在 `pkg/util` 里设计一个敏感词过滤函数(或者找个库),然后在 Service 层调用它。
- _这就是你说的:_ “进行到具体的业务逻辑的时候进行设计”。
---
## 4. 总结给你的建议
你现在的焦虑在于试图**预见未来**。
**作为个人开发者,你的代码就是你的设计文档。**
**你的下一步行动:**
1. **停止**思考复杂的业务场景。
2. **立即**按照我们之前确定的目录结构,新建文件夹。
3. **立即**把 `docker-compose` 跑起来,把 `main.go` 跑起来。
4. **立即**实现“用户注册”这一个功能。
只要“骨架”(架构分层、依赖注入、数据库管理方式)是对的,后面你往里面填什么肉(业务逻辑),怎么填,都不会把楼盖歪。
**准备好开始初始化项目文件夹了吗?**