---
name: valec3/backend-architecture-mvc
source: https://app.decimal.ai/s/valec3-backend-architecture-mvc@1/SKILL.md
source_sha256: 20e5e285d972
---

# Backend Architecture MVC

## When to use this skill
- Organizing CodeIgniter applications
- Separating concerns properly
- Building maintainable apps

## Workflow
- [ ] Controllers handle HTTP requests
- [ ] Models handle data logic
- [ ] Views handle presentation
- [ ] Keep controllers thin
- [ ] Business logic in services

## Instructions

### Controller (Thin)
```php
<?php

namespace App\Controllers;

use App\Services\UserService;

class UserController extends BaseController
{
    public function __construct(
        private readonly UserService $service
    ) {}

    public function index()
    {
        $users = $this->service->getAllUsers();
        return view('users/index', ['users' => $users]);
    }

    public function store()
    {
        $user = $this->service->createUser($this->request->getPost());
        return $this->respond($user);
    }
}
```

### Model (Data Access)
```php
<?php

namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table = 'users';
    protected $allowedFields = ['name', 'email'];
    protected $returnType = 'App\Entities\User';
}
```

### Service (Business Logic)
```php
<?php

namespace App\Services;

class UserService
{
    public function __construct(
        private UserModel $model
    ) {}

    public function getAllUsers()
    {
        return $this->model->findAll();
    }
}
```

## Resources
- Controllers: thin, route to services
- Models: database operations only
- Services: business logic