## Crea clases para queries específicas:

La creación de clases para queries específicas permite el uso de obtención de datos de forma más declarativa y simple de entender

Ejemplo de implementación:

```php
<?php

namespace App\Queries;

use Core\DB\Query\Query;

/**
 * Query that retrieves a user by id.
 */
class GetUserByIdQuery extends Query
{
    private int $id;

    /**
     * Constructor.
     *
     * @param int $id
     */
    public function __construct(int $id)
    {
        $this->id = $id;
    }

    /**
     * SQL query.
     */
    public function sql(): string
    {
        return "
            SELECT *
            FROM users
            WHERE id = :id
        ";
    }

    /**
     * Query parameters.
     */
    public function params(): array
    {
        return [
            'id' => $this->id
        ];
    }
}
```

## Uso

```php
use App\Queries\GetUserByIdQuery;

$user = $db->fetchQueryOne(
    new GetUserByIdQuery(10)
);
```

## Ventajas
Queries reutilizables: puedes usar el mismo Query en:

- API
- CLI
- Cron
- Services

## Testing muy facil

```php
$query = new GetUserByIdQuery(10);

$this->assertEquals(
    ['id'=>10],
    $query->params()
);
```
## Código más limpio (Mucho más expresivo)
Antes:
```php
$db->fetchOne(
    "SELECT * FROM users WHERE id = ?",
    [$id]
);
```

Ahora:
```php
$db->fetchQueryOne(
    new GetUserByIdQuery($id)
);
```