Files
Inbox/Go项目实战/00_顶层设计/关于个人开发者的开发模式.md
2025-12-11 07:24:36 +08:00

4.6 KiB
Raw Permalink Blame History

tags, aliases, date created, date modified
tags aliases date created date modified
渐进式开发最佳实践
星期一, 十二月 8日 2025, 12:04:31 凌晨 星期一, 十二月 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:CreateUserFindUser 的 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. 立即实现“用户注册”这一个功能。

只要“骨架”(架构分层、依赖注入、数据库管理方式)是对的,后面你往里面填什么肉(业务逻辑),怎么填,都不会把楼盖歪。

准备好开始初始化项目文件夹了吗?