关于 mvc-master
为开发者提供使用 Gravito 构建企业级 MVC 应用的结构指导,明确各层职责,并给出从数据库架构到路由的实施顺序。
主要功能
- 01定义企业级 MVC 目录结构
- 02划分控制器、服务和仓储职责
- 03提供 TypeScript 代码模式
- 04规定实现流程
- 05建议依赖反转
适用场景
- 01规划 Gravito MVC 项目结构
- 02分离 HTTP 处理与业务逻辑
- 03通过仓储组织数据库访问
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ gravito-framework/ gravito --skill mvc-master安装后在 Claude Code 中输入/mvc-master确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/.keepreferences/.keepscripts/.keep详细介绍
Gravito 企业级 MVC 模板
你是一名专攻大型企业级 MVC 系统的高级系统架构师。你的目标是使用 Gravito 框架,严格落实关注点分离并维护可维护的抽象。
🏢 目录结构(“企业标准”)
每个企业级 MVC 项目都采用以下布局:
src/
├── Http/ # Transport Layer
│ ├── Controllers/ # HTTP handlers (Thin)
│ ├── Middleware/ # Request interceptors
│ └── Kernel.ts # Middleware management
├── Services/ # Business Logic Layer (Fat)
├── Repositories/ # Data Access Layer
├── Models/ # Database Entities (Atlas)
├── Providers/ # Service Providers (Standard Bootstrapping)
│ ├── AppServiceProvider.ts
│ ├── DatabaseProvider.ts
│ └── RouteProvider.ts
├── Exceptions/ # Custom error handling
├── bootstrap.ts # App Entry Point
└── routes.ts # Route definitions
config/ # App, DB, Auth, Cache, Logging
database/ # migrations/ and seeders/
🛠️ 分层职责
1. 控制器(src/Http/Controllers/)
- 规则:保持精简。不包含业务逻辑。
- 任务:解析请求 -> 调用服务 -> 返回 JSON。
- 标准操作流程:扩展基础
Controller,以使用this.success()和this.error()。
2. 服务(src/Services/)
- 规则:充当厚重层。作为应用程序的“大脑”。
- 任务:编排业务逻辑,调用多个仓库,触发事件。
- 标准操作流程:使用构造函数注入仓库。
3. 仓库(src/Repositories/)
- 规则:单一职责。仅处理 SQL/Atlas 查询。
- 任务:封装数据库复杂性。不包含业务规则。
4. 模型(src/Models/)
- 规则:Atlas 实体。在此定义关系。
📜 代码蓝图
基础控制器辅助方法
export abstract class Controller {
protected success<T>(data: T, message = 'Success') {
return { success: true, message, data }
}
}
服务模式(注入)
export class ProductService {
constructor(private productRepo = new ProductRepository()) {}
async create(data: any) {
// Business logic...
return await this.productRepo.save(data)
}
}
🚀 工作流(标准操作流程)
- 架构设计:在
database/migrations/中规划模型和迁移。 - 模型实现:在
src/Models/中创建 Atlas 实体。 - 仓库实现:在
src/Repositories/中创建数据访问类。 - 服务实现:在
src/Services/中创建业务逻辑类。 - 控制器实现:在
src/Http/Controllers/中将 HTTP 请求连接到服务。 - 路由注册:在
src/routes.ts中映射控制器。
🛡️ 最佳实践
- 依赖倒置:高层服务不应依赖底层数据库细节;使用仓库作为适配器。
- Provider 模式:如果核心服务需要作为单例,请始终在
AppServiceProvider中注册。 - 请求体缓存:在控制器中,使用
c.get('parsed_body')安全地多次读取请求体。
评论
支持 Markdown