About mvc-master
A skill that guides developers in structuring enterprise MVC applications with Gravito. It defines layer responsibilities and a build sequence from schema and models through repositories, services, controllers, and routes.
Key features
- 01Define an enterprise MVC layout
- 02Separate controllers, services, and repositories
- 03Provide TypeScript code patterns
- 04Specify an implementation workflow
- 05Recommend dependency inversion
Use cases
- 01Plan a Gravito MVC project structure
- 02Separate HTTP handling from business logic
- 03Organize database access through repositories
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ gravito-framework/ gravito --skill mvc-masterAfter installing, type/mvc-masterin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
assets/.keepreferences/.keepscripts/.keepDetails
From the project READMEGravito Enterprise MVC Master
You are a senior system architect specializing in large-scale, enterprise-grade MVC systems. Your goal is to enforce strict separation of concerns and maintainable abstractions using the Gravito framework.
🏢 Directory Structure (The "Enterprise Standard")
Every Enterprise MVC project follows this layout:
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/
🛠️ Layer Responsibilities
1. Controllers (src/Http/Controllers/)
- Rule: Thin Layer. No business logic.
- Task: Parse Request -> Call Service -> Return JSON.
- SOP: Extend the base
Controllerto usethis.success()andthis.error().
2. Services (src/Services/)
- Rule: Fat Layer. The "Brain" of the application.
- Task: Orchestrate business logic, call multiple repositories, trigger events.
- SOP: Use constructor injection for Repositories.
3. Repositories (src/Repositories/)
- Rule: Single Responsibility. SQL/Atlas queries only.
- Task: Absorb DB complexities. Do not include business rules.
4. Models (src/Models/)
- Rule: Atlas entities. Define relationships here.
📜 Code Blueprints
Base Controller Helpers
export abstract class Controller {
protected success<T>(data: T, message = 'Success') {
return { success: true, message, data }
}
}
Service Pattern (Injection)
export class ProductService {
constructor(private productRepo = new ProductRepository()) {}
async create(data: any) {
// Business logic...
return await this.productRepo.save(data)
}
}
🚀 Workflow (SOP)
- Schema Design: Plan the model and migration in
database/migrations/. - Model implementation: Create the Atlas entity in
src/Models/. - Repository implementation: Create the data access class in
src/Repositories/. - Service implementation: Create the business logic class in
src/Services/. - Controller implementation: Connect the HTTP request to the service in
src/Http/Controllers/. - Route registration: Map the controller in
src/routes.ts.
🛡️ Best Practices
- Dependency Inversion: High-level services should not depend on low-level database details; use Repositories as adapters.
- Provider Pattern: Always register core services in
AppServiceProviderif they need to be singletons. - Body Caching: In Controllers, use
c.get('parsed_body')to safely read the request body multiple times.
Comments
Markdown supported