mcpField
M
modular-monolith-architecture

modular-monolith-architecture

github.com/azzam-almatrafi开发050 次安装24 周前更新
代码仓库

关于 modular-monolith-architecture

用于生成模块化单体项目的 Skill,包含有界模块、公开契约和共享内核。它面向需要单一部署应用、明确模块边界及验证检查的开发者。

主要功能

  1. 01生成面向模块的项目结构
  2. 02定义模块间公开契约
  3. 03隔离各模块数据库模式
  4. 04创建共享内核与宿主入口
  5. 05包含测试和可观测性配置
  6. 06验证边界及循环依赖

适用场景

  1. 01搭建新的模块化单体
  2. 02将业务域组织为隔离模块
  3. 03集成前检查模块边界
  4. 04规划模块拆分为微服务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/azzam-almatrafi/skills --skill modular-monolith-architecture

安装后在 Claude Code 中输入/modular-monolith-architecture确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

examples/
dotnet-scaffold.md
nestjs-scaffold.md
README-template.md
references/
api-versioning-communication.md
architecture-guide.md
event-driven-patterns.md
migration-to-microservices.md
module-design.md
observability.md
project-structures.md
testing-strategies.md
scripts/
check-circular-deps.sh
validate-boundaries.sh
validate-shared-kernel.sh

详细介绍

模块化单体架构 — 项目脚手架

生成可用于生产环境的模块化单体项目,遵循行业最佳实践,具备恰当的模块边界、内部 API、共享内核和基础设施。

概述

模块化单体是一个可独立部署的应用,由松耦合、高内聚的模块组成,每个模块代表一个限界上下文。它结合了单体架构的简洁性(单次部署、ACID 事务、进程内调用)与微服务风格的模块化(边界清晰、团队自主、独立开发)。

此技能可搭建完整项目,包含:

  • 模块隔离:每个模块负责自己的领域、数据访问和 API 接口
  • 模块间通信:通过公共契约/接口进行,绝不暴露内部细节
  • 共享内核:将横切关注点(身份验证、日志记录、事件)放在共享层
  • 按模块划分数据库架构:在单个 RDBMS 中实现逻辑隔离
  • 支持后续迁移的边界:模块日后可拆分为微服务

工作流

步骤 1:收集需求

如果用户尚未指定,请询问:

  1. 语言/框架(例如 C#/ASP.NET Core、Java/Spring Boot、TypeScript/NestJS、Python/Django、Go)
  2. 项目名称
  3. 业务模块(例如 Product、Order、Payment、Shipping、Notification)
  4. 数据库偏好(PostgreSQL、MySQL、SQL Server、用于开发的 SQLite)
  5. 其他功能:事件总线、API 网关、Docker、CI/CD

如果用户提供了 $ARGUMENTS,请解析:$ARGUMENTS[0] = 语言/框架,$ARGUMENTS[1] = 项目名称,其余参数 = 模块名称。

步骤 2:生成项目结构

阅读所选框架的架构参考资料:

生成项目时,请遵循以下关键规则:

模块规则
  1. 每个模块都有自己的目录和内部层(Domain/Application/Infrastructure/API)
  2. 模块只能通过公共契约(接口/DTO)通信,绝不引用其他模块的内部类型
  3. 每个模块都有自己的数据库架构或迁移文件夹
  4. 每个模块自行注册其服务/依赖项
  5. 模块之间不得存在循环依赖
共享内核规则
  1. 仅包含横切关注点:基类实体、通用值对象、事件总线接口、身份验证抽象
  2. 必须保持精简——如果内容变得庞大,说明其中某些内容应归属于某个模块
  3. 绝不包含特定于任何模块的业务逻辑
基础设施规则
  1. 单一入口点(Program.cs / main.ts / main.py / main.go)
  2. 由组合根将所有模块连接起来
  3. 共享数据库上下文/会话,但各架构相互隔离
  4. 通过事件总线实现模块间的异步通信(进程内实现,可升级为消息代理)
步骤 3:生成代码

为每个模块生成:

  • 领域层:实体、值对象、领域事件、仓储接口
  • 应用层:用例/命令/查询、DTO、验证
  • 基础设施层:仓储实现、数据库配置、迁移
  • API 层:控制器/处理程序、请求/响应模型、模块注册

还要生成:

  • 共享内核:基类、事件总线、通用抽象
  • 宿主/入口点:组合根、中间件、配置
  • 测试:模块单元测试、集成测试、契约测试和架构边界测试——参见 references/testing-strategies.md
  • 可观测性:模块范围内的日志记录、运行状况检查和跟踪设置——参见 references/observability.md
  • Docker(如果有要求):Dockerfile + 包含数据库的 docker-compose
  • README.md:架构概览、运行方法、添加模块的方法(使用 examples/README-template.md)
步骤 4:验证

生成后:

  1. 验证没有模块直接引用其他模块的内部类型
  2. 确认每个模块都有自己的架构/迁移文件夹
  3. 检查共享内核不包含业务逻辑
  4. 确保项目可以成功构建/编译
  5. 运行生成的所有测试

脚本 可用于集成到 CI:

  • scripts/validate-boundaries.sh <modules-dir> — 检测跨模块边界违规
  • scripts/validate-shared-kernel.sh <shared-dir> <modules-dir> — 确保共享内核不引用模块
  • scripts/check-circular-deps.sh <modules-dir> — 检测模块间的循环依赖
步骤 5:迁移指南

如果用户询问如何将模块提取为微服务,请参见 references/migration-to-microservices.md,其中提供了详细的分步指南,涵盖:

  • 何时提取(基于证据的信号)
  • 提取前检查清单
  • 创建服务、替换实现、添加弹性机制
  • 回滚策略

应遵循的核心原则

原则含义执行方式
高内聚模块包含其领域所需的一切每个模块包含领域层 + 应用层 + 基础设施层 + API 层
低耦合模块不依赖彼此的内部实现仅通过共享契约/接口进行通信
单一职责每个模块都有一个有界上下文每个模块目录对应一个业务领域
数据封装模块拥有自己的数据每个模块使用独立的数据库架构,不进行跨模块查询
依赖显式化所有模块依赖都清晰可见模块注册文件列出所需契约
领域驱动设计模块与业务领域保持一致按业务能力命名,而不是按技术层命名

调用示例

/modular-monolith dotnet ECommerceApp Product Order Payment Shipping
/modular-monolith spring-boot MyShop catalog basket checkout
/modular-monolith nestjs SaasApp tenant billing notification
/modular-monolith go FinanceApp accounts transactions reporting

不适用场景

如果用户描述以下情况,建议改用微服务:

  • 团队需要完全独立的部署节奏
  • 需要多语言技术栈(Python 机器学习 + Go API + Java 企业应用)
  • 对每个服务有极端的独立扩展需求
  • 已有 Kubernetes 基础设施和成熟的 DevOps 能力

如果符合以下情况,建议采用简单的单体架构:

  • 独立开发者或非常小的团队(1-3 名开发者)
  • 领域边界不明确的原型/MVP
  • 业务领域少于 3 个的应用

评论

支持 Markdown