整体开发设计-项目工程仓库类型与设计
文/晨风不可依米 (2025.10.01)
传统单体仓库与现代单一仓库
传统单体仓库
- 将
整个应用程序的所有代码存放在一个仓库;其项目代码组织方式紧密耦合,缺乏清晰边界。 - 代码间依赖关系直接引用,缺乏版本控制和明确的依赖关系;在关联性功能修改时容易造成 "牵一发而动全身" 的局面。
- 采用集中式开发模式,团队成员共享同一套代码基线,易造成合并冲突,且需要频繁同步代码。
- 采用整体构建、整体部署的模式;一处修改需要重新构建部署,其部署风险高且效率低。
- 应用场景适用于初创公司、小团队、业务简单的开发。采用同一套技术栈,并不需要工程化构建部署流水线配置。
现代单一仓库
- 将
多个关联项目的所有代码存放在一个仓库;各项目保持逻辑上的独立边界,通过工具链支持实现模块化管理。 - 通过内部包管理机制实现模块间的显式依赖,有明确的版本依赖声明,可支持局部构建与测试、依赖变更影响分析、跨模块原子化更新等。
- 代码所有权有机制明确责任边界,支持精细化的权限控制、自动化的代码审查流程、独立的模块发布周期等。
- 通过工具链支持实现统一版本控制、环境一致性;采用增量构建,并支持单独部署。
- 应用场景适用于多团队之间有明确的责任边界和协作规范,应用可拆分为多个独立部署的服务或模块,推行一致的编码规范、测试标准和构建流程。
系统架构的渐进式迁移策略
- 明确逻辑边界:识别代码中的业务功能并划分责任边界。
- 统一依赖版本:消除循环依赖,建立清晰的依赖规则。
- 单一仓库架构:遵循单一仓库
monorepo模式架构范式。 - 功能增量迁移:按业务优先级服务或模块迁移,保持系统正常运行。
- 全链路流程优化:同步构建更新开发、测试、部署流程等。
单一仓库模式的系统设计实践
模块划分范式
- 按业务域垂直划分:每个业务都有完整能力的功能。如文件、支付、日志等系统。
- 保持高内聚低耦合:模块内部紧密关联,模块间需定义明确的通信接口。
- 明确代码所有权:服务或模块的开发,有明确的负责人。
- 控制模块粒度:在程序代码的拓展性和灵活性间平衡取舍设计。
依赖管理范式
- 禁止项目依赖循环,确保依赖关系是有向无环图 (
DAG)。 - 明确声明依赖配置,禁止采用相对路径引用。
- 遵循最小依赖原则,避免非按需倒入依赖。
- 依赖版本兼容支持,制定内部模块版本号规则,明确兼容性保证范围。
统一标准范式
- 代码质量规范、测试覆盖率、
CI流程等基础标准全仓库统一。 - 构建、部署、监控等基础设施共享,但允许模块定制扩展。
- 渐进式规范演进,避免初期过度约束。
- 技术开放性,允许特定业务采用不同语言开发。
- 统一代码提交日志范式(标题、范围、详细内容、修复记录),支持可溯洄功能。
- 确保相关模块的变更同步验证、同步发布。
仓库结构设计
采用分层结构设计项目目录。
- 应用库(
app):存放最终应用的程序库。(前后端项目、桌面移动项目等) - 工具库(
tool):存放自定义不参与业务逻辑的可跨项目通用工具库。(构建、脚本、环境、规则等) - 第三方库(
lib):存放对第三方依赖的封装、适配或扩展,形成内部统一且隔离外部依赖的接口层。(二次封装类库,适配器接口等) - 脚本库(
script):存放项目脚本命令。(环境部署、版本发布、数据迁移、批处理、工作流、配置检查等) - 模块库(
package):存放基建模块类库。(业务模块、组件库等)
构建系统设计
解决效率和一致性问题。
- 采用增量构建:只构建变更的模块及其依赖。
- 支持局部开发:只启动相关服务或模块开发功能。
- 统一构建命令:为不同技术栈提供一致的构建命令。
- 构建缓存策略:实现跨开发环境和
CI的构建缓存共享。
迭代版本发布
- 采用 "语义化版本" 规范管理版本号;用
git tag标记发布版本。 - 使用自动化工具管理版本变更。
- 建立明确的发布审批流程,尤其是核心模块。
- 维护详细的
CHANGELOG,记录各模块变更内容。
测试策略设计
- 采用分层测试:单元测试、集成测试、端到端测试分离。
- 选择性测试:只运行变更模块及其依赖的测试。
- 统一测试报告:聚合各模块测试结果,提供全局视图。
- 测试环境隔离:确保不同模块的测试不会相互干扰。
后端微服务架构系统(ymmicro)
- 使用
NestJs Cli的nest new先创建标准模式项目,后通过nest g app命令转换为单一仓库模式,可变成微服务架构项目。
前端单一仓库架构系统(ymclient)
- 参照
pnpm官网配置pnpm-workspace.yaml文件内容(仓库结构分层设计)。
文章收获
- 如果觉得对你有所帮助,请点下“推荐”吧!
- 如果担心文忘记章地址,请点下“收藏”吧!
- 如果对博主文章内容喜欢,可进行“关注”博主,更好地获悉最新文章内容。

浙公网安备 33010602011771号