开发规范学习

需求分析

市场调研→srs需求文档

设计阶段

ux交互设计,ui交互设计

技术评审→概要设计→详细设计→架构图组件图

开发阶段

仓库管理→git开发流程

开发规范制定

代码合并规范

代码单元测试

git开发规范

分支管理

  1. master分支,拿出来可以随时运行的成熟代码
  2. develop分支,从master上分出来,每个人从develop上分出自己的feature分支,改动后merge到develop上
  3. release分支,即发布分支,发布前进行一些简单测试和简单的bug修复
  4. feature分支,即功能分支,从develop上分出,团队成员中每个人都维护自己的feature分支
  5. fix分支,即补丁分支,由develop分出,用作bug修复

commit规范

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

例如:

feat(auth): add JWT token authentication

- 新增用户登录时的 token 验证
- 增加 token 过期时间配置
- 修复用户 session 失效问题

BREAKING CHANGE: 改动了用户认证方式,需要前端配合调整登录逻辑

go代码规范

https://github.com/xxjwxc/uber_go_guide_cn

go目录规范

https://github.com/golang-standards/project-layout/blob/master/README_zh.md

mono-repo/multi-repo

Mono-repo 的优势

Mon-repo 方式有许多优点:

  1. 存储所有项目代码的单独位置,团队中的每个人都可以访问。
  2. 易于重用和共享代码,与团队合作。
  3. 就意味着基本上没有版本管理,只有最新版,我升级了版本,引用的地方就会报错,很容易理解你的变更对整个项目的影响。
  4. 代码重构和代码大变更的最佳选择。
  5. 团队成员可以获得整个项目的总体视图。
  6. 易于管理依赖关系。

Mono-repo 的劣势

当然,Mono-repo 也有一些缺点,主要表现在性能上。如果你的项目增长,每隔一天都会添加更多的文件,那么 git checkout、pull 和其他操作可能变得缓慢,以及文件搜索可能需要更长的时间。

此外,如果你为你的项目雇佣了许多独立的承包商,那么让他们访问整个代码库可能不那么安全。

此外,实现持续部署(Continuous deployation,CD)也很困难,因为许多人可以合入他们的更改,而持续集成(Continuous Integration,CI)系统可能需要进行多次重构。

使用 Mono-repo 的大公司都有自定义工具来处理扩展问题。例如,Facebook 使用自定义文件系统和源代码控制。

什么是 Multi-repo?

在 Multi-repo 方法中,存在多个存储库,它们承载一个项目的多个库和服务。如果服务发生更改,开发人员只需重新构建该服务,而不需要构建整个项目。个人和团队可以从事他们特定的服务,他们只能访问他们有权限的服务。像 Netflix 和 Amazon 这样的公司使用 Multi-repo。

Multi-repo 的优势**?**

采用 Multi-repo 的公司数量远远多于采用 Mono-repo 的公司,原因如下:

  1. 每个服务和库都有自己的版本控制。
  2. 代码 checkout 和 pull 是小型且独立的,因此即使项目规模增大,也不存在性能问题。
  3. 团队可以独立工作,不需要访问整个代码库。
  4. 更快的开发和灵活性。
  5. 每个服务都可以单独发版,并有自己的部署周期,从而使 CI 和 CD 更易于实现。
  6. 更好的权限访问控制——所有的团队不需要完全访问所有的库——需要的时候,再获得读访问权限。

Multi-repo 的劣势

跨服务和项目使用的公共依赖和库必须定期同步以获得最新版本。

某种程度上鼓励孤立文化,导致重复代码和各个团队试图解决相同问题。

每个团队可能遵循不同的一组最佳实践来编写代码,从而导致难以遵循通用的最佳实践。

微服务的目录规范

/api 存放proto文件和生成的代码 /app 存放各个微服务,包括grpc服务和http服务 : 大量逻辑在这里,这里是重点目录,后期各个服务单独重构的时候讲解具体的原因 /goods 存放商品服务 /srv service服务 /mxshop /admin 后台管理系统的服务 /apiserver 整个电商项目的服务 /configs 保存各个服务的yaml配置文件 /cmd 保存各个服务的启动main启动源码 /build 保存docker部署文件和shell启动脚本 /logs 保存各个服务的日志文件 /pkg 保存所有微服务的公共代码 /third_party 第三方源码,可以存放第三方的proto源码,克隆下来的第三方源码等 /tools 存放一些工具源码

golangci-lint代码检测

golangci-lint 是一个集成工具,它集成了很多静态代码分析工具(静态代码分析是不会运行代码的),我们通过配置这个工具,便可灵活启用需要的代码规范检查。

测试阶段

功能测试

集成测试

系统测试

压力测试

发布阶段

代码合并到主干分支

生成版本号

代码扫描

代码检查go vet,总单元测试

编译

构建镜像

资源申请

发布计划

运营阶段

运营


开发规范学习
http://example.com/2025/04/18/开发规范学习/
作者
WoodQ
发布于
2025年4月18日
许可协议