项目封闭开发过程中一些高效编程的方法记录

AI 摘要: 本文主要介绍了自动化模版和脚本、OpenAI 结对编程、工程素养、智研 DevOps 平台、编码规范等内容。其中涵盖了需求分析、脚本自动化提效、GitOps 和 DevOps 结合、工程素养、编码规范、OpenAI 结对编程、联调测试、小问题和职业素养等方面的内容。

1. 背景

关键词: 自动化模版和脚本、OpenAI 结对编程、工程素养、智研 DevOps 平台、TKEx 平台、TRPC 框架、编码规范

活水到新部门后,花了一部份时间在做高可用,正好把 CICD、以及工程化相关的事情整理了下。

最近被拉到封闭项目中,一些前期的工作正好都用上了,另外一些开发习惯这里简单记录下

2. 内容札记

2.1. 需求分析

  • 项目前期需求分析+方案设计,包括 Mindnode 脑图分模块、Draw.io、Wiki 文档、PlantUml 时序图
  • 领域、子领域拆分和设计(后台 Admin、店铺 Shop、商品 Goods、交易 Trade、交易网关 Gateway、资源 Resource、退款 Refund、结算 Settle、授权 License)

palnt-uml时序图

2.2. 通过脚本自动化提效

  • 项目 Layout 的初始化,一键快速创建出符合 DDD 目录结构
  • PB 协议更新借助MakefileShell能够快速更新 PB+提交公共 PB 库,项目通过make pb-update快速更新
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
# -e: 错误立马停止 -u: 未定义变量立即停止 -x: 打印命令
set -eux

# 初始化项目/.
trpc create -p ./proto/backend_trade_gateway.proto --protocol=http --alias -f -o .
go mod tidy

# 创建app 应用目录
mkdir -p app/{api,application,domain/{entity,repos,service},infra/{config,dbs}}
mkdir -p {deployment/sql,internal/shim,test/testdata}

# 创建conf 配置目录
mkdir -p conf/{mainland,intl}
touch conf/{mainland,intl}/trpc_go_test.yaml

# 七彩石配置
cfg_file_path="app/infra/config/config.go"
if [ ! -f "$cfg_file_path" ]; then
  touch $cfg_file_path
  echo "package config" >$cfg_file_path
fi

# .gitignore
echo .idea >> .gitignore

2.3. GitOps 和 DevOps 结合

  • Git 通过Git Hook配置 git push 后出发自动 CI 构建打包镜像流程
  • 智研 DevOps 工具的 CI、CD 的快速集成,通过Pipeline项目支持MakefileDockerfile等环境变量的初始化,实现快速镜像打包

2.4. 工程素养

  • 服务命名:北极星名字根据协议映射不同端口(CAPI、CBilling、TRPC 协议对应不同名字),协议部分考虑使用 Codec 解析 - todo
  • 全链路跟踪:开发的 qclog 插件,请求过来 → 日志 Filter → 重新注入 tradeId 实现 ,同时支持 CAPI 和智研链路 TradeID 串起来,方便问题快速 Debug
  • APM:Trpc 框架的 yaml 配置+智研的 OpenTelemetry+APM+日志打通
  • 代码提交
    • 分支命名:使用 feat/{branch-name}-{datetime} 格式
    • 提交注释:--feat--bugfix描述清楚问题,Commit Message 言简意赅的描述更改内容,每个 Commit 是一个具体的修改/特性点,快速验证
  • 单元测试:针对一些 DTO 转化、签名验证、反序列化函数做基本校验

2.5. 编码规范

  • 接口协议命名:可以让 ChatGPT 的多命名帮助
  • 代码分层:多层 vs 三层取舍,具体什么放 Application 编排,什么放 Domain/Services 服务需要更多思考,如何分层是一个比较难处理问题
  • 模块化设计:不同 entity 负责对应内容,api/app/domain/infra 四层
  • DTO 问题:售卖商品 → 订单商品 → 计费下单商品
  • 良好的日志规范:加速问题发现和解决(出入口函数fn[]模式wrap日志包裹、LogInfoContenxtf()traceId关联) → todo 这里考虑通过日志插件 qlog 升级实现
  • 小批量重构:通过 Goland 的快捷键、重命名、函数抽象等,结合 ChatGPT 的命名帮助实现更优雅一些代码

2.6. OpenAI 结对编程

  • ChatGPT4o,包括 DB 设计、命名问题、疑难问题解决、代码编写等,OpenAI+NextChat提供了非常大的帮助(目前工作离不开 AI 了)

AI结对编程

2.7. 联调测试

  • 网关支持七彩石动态的 Mock 数据完成接口调试,通过配置调整、开关支持动态灵活的下游配置,在和第三方联调时候,加速链路的调通验证
  • Goland 的 test 模块,编写一定的 curl、http 测试用例,方便快速模拟请求
  • 通过 tcpdump 协议抓 HTTP 请求响应包

2.8. Notion 计划+Flow 番茄钟

  • Notion 提前规划一天的工作计划,结束时候做过简单总结
  • 设计一个 Flow 番茄钟,完成一个具体的任务项(比如协议设计、一个小任务完成)

flow番茄钟运用

2.9. 职业素养\沟通协作

  1. 对交付负责、对代码质量负责,不断提升自己在团队中的份量,赢取团队成员信任(赢取信任)
  2. 与人沟通,控制情绪,真诚帮助他人,不高高在上(帮助他人)
  3. 学会拒绝,可以告诉他人你目前的情况,让他人先自己尝试一些问题解决办法(学会拒绝)
  4. 项目任务情况还是应该正常同步,这个是职业素养(进度、问题、风险)
  5. 没有必要和他人争得面红耳赤,技术问题也是如此,你争论不休并不会带来多少收益(情绪控制)
  6. 如果你理解错了,我可以再说一遍,或者和对方确认,如果目前不认可这个观点可以再抛出来讨论(确认达成共识)
  7. 先完成再完美,不用想着什么组件、轮子都必须十全十美(简单、合适、演化原则)

2.10. 其他

  1. 动态结构体动态扩展 sv 信息,通过map[string]interface{}解决、以及 MarshalJSON()接口实现结构体 Json 序列化时候动态扩展字段
  2. Gorm 在结构体存储前后的 before、after 处理