整体开发设计-项目工程仓库类型与设计

文/晨风不可依米 (2025.10.01)

传统单体仓库与现代单一仓库

传统单体仓库

  • 整个应用程序的所有代码存放在一个仓库;其项目代码组织方式紧密耦合,缺乏清晰边界。
  • 代码间依赖关系直接引用,缺乏版本控制和明确的依赖关系;在关联性功能修改时容易造成 "牵一发而动全身" 的局面。
  • 采用集中式开发模式,团队成员共享同一套代码基线,易造成合并冲突,且需要频繁同步代码。
  • 采用整体构建、整体部署的模式;一处修改需要重新构建部署,其部署风险高且效率低。
  • 应用场景适用于初创公司、小团队、业务简单的开发。采用同一套技术栈,并不需要工程化构建部署流水线配置。

现代单一仓库

  • 多个关联项目的所有代码存放在一个仓库;各项目保持逻辑上的独立边界,通过工具链支持实现模块化管理。
  • 通过内部包管理机制实现模块间的显式依赖,有明确的版本依赖声明,可支持局部构建与测试、依赖变更影响分析、跨模块原子化更新等。
  • 代码所有权有机制明确责任边界,支持精细化的权限控制、自动化的代码审查流程、独立的模块发布周期等。
  • 通过工具链支持实现统一版本控制、环境一致性;采用增量构建,并支持单独部署。
  • 应用场景适用于多团队之间有明确的责任边界和协作规范,应用可拆分为多个独立部署的服务或模块,推行一致的编码规范、测试标准和构建流程。

系统架构的渐进式迁移策略

  • 明确逻辑边界:识别代码中的业务功能并划分责任边界。
  • 统一依赖版本:消除循环依赖,建立清晰的依赖规则。
  • 单一仓库架构:遵循单一仓库monorepo模式架构范式。
  • 功能增量迁移:按业务优先级服务或模块迁移,保持系统正常运行。
  • 全链路流程优化:同步构建更新开发、测试、部署流程等。

单一仓库模式的系统设计实践

模块划分范式

  • 按业务域垂直划分:每个业务都有完整能力的功能。如文件、支付、日志等系统。
  • 保持高内聚低耦合:模块内部紧密关联,模块间需定义明确的通信接口。
  • 明确代码所有权:服务或模块的开发,有明确的负责人。
  • 控制模块粒度:在程序代码的拓展性和灵活性间平衡取舍设计。

依赖管理范式

  • 禁止项目依赖循环,确保依赖关系是有向无环图 (DAG)。
  • 明确声明依赖配置,禁止采用相对路径引用。
  • 遵循最小依赖原则,避免非按需倒入依赖。
  • 依赖版本兼容支持,制定内部模块版本号规则,明确兼容性保证范围。

统一标准范式

  • 代码质量规范、测试覆盖率、CI流程等基础标准全仓库统一。
  • 构建、部署、监控等基础设施共享,但允许模块定制扩展。
  • 渐进式规范演进,避免初期过度约束。
  • 技术开放性,允许特定业务采用不同语言开发。
  • 统一代码提交日志范式(标题、范围、详细内容、修复记录),支持可溯洄功能。
  • 确保相关模块的变更同步验证、同步发布。

仓库结构设计

采用分层结构设计项目目录。

  • 应用库(app):存放最终应用的程序库。(前后端项目、桌面移动项目等)
  • 工具库(tool):存放自定义不参与业务逻辑的可跨项目通用工具库。(构建、脚本、环境、规则等)
  • 第三方库(lib):存放对第三方依赖的封装、适配或扩展,形成内部统一且隔离外部依赖的接口层。(二次封装类库,适配器接口等)
  • 脚本库(script):存放项目脚本命令。(环境部署、版本发布、数据迁移、批处理、工作流、配置检查等)
  • 模块库(package):存放基建模块类库。(业务模块、组件库等)

构建系统设计

解决效率和一致性问题。

  • 采用增量构建:只构建变更的模块及其依赖。
  • 支持局部开发:只启动相关服务或模块开发功能。
  • 统一构建命令:为不同技术栈提供一致的构建命令。
  • 构建缓存策略:实现跨开发环境和CI的构建缓存共享。

迭代版本发布

  • 采用 "语义化版本" 规范管理版本号;用git tag标记发布版本。
  • 使用自动化工具管理版本变更。
  • 建立明确的发布审批流程,尤其是核心模块。
  • 维护详细的CHANGELOG,记录各模块变更内容。

测试策略设计

  • 采用分层测试:单元测试、集成测试、端到端测试分离。
  • 选择性测试:只运行变更模块及其依赖的测试。
  • 统一测试报告:聚合各模块测试结果,提供全局视图。
  • 测试环境隔离:确保不同模块的测试不会相互干扰。

后端微服务架构系统(ymmicro

  • 使用NestJs Clinest new先创建标准模式项目,后通过nest g app命令转换为单一仓库模式,可变成微服务架构项目。

前端单一仓库架构系统(ymclient

  • 参照pnpm官网配置pnpm-workspace.yaml文件内容(仓库结构分层设计)。



文章收获

  • 如果觉得对你有所帮助,请点下“推荐”吧!
  • 如果担心文忘记章地址,请点下“收藏”吧!
  • 如果对博主文章内容喜欢,可进行“关注”博主,更好地获悉最新文章内容。
posted @ 2025-10-01 11:55  晨风不可依米  阅读(4)  评论(0)    收藏  举报