---
title: "Command - інкапсуляція дії"
url: https://laravelukraine.com/blog/command-inkapsuliaciia-diyi
author: "Олексій Бабінцев"
date: 2026-07-11
---

# Command - інкапсуляція дії

Command інкапсулює дію разом із її параметрами в окремий об'єкт, який можна передавати, ставити в чергу й виконувати пізніше.

### Яку проблему вирішує

Коли дія викликається прямо там, де виникла, її важко відкласти, повторити, поставити в чергу чи запланувати. Логіка осідає в контролерах і дублюється.

### Як вирішує

Дію оформлюють як об'єкт із методом виконання й полями-параметрами. Такий об'єкт легко передати диспетчеру, серіалізувати, поставити в чергу чи запустити з CLI. У Laravel це Jobs і Console Commands.

```php
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\SerializesModels;

class SendInvoice implements ShouldQueue
{
  use Dispatchable, Queueable, SerializesModels;

  public function __construct(public int $orderId) {}

  public function handle(): void
  {
    $order = Order::findOrFail($this->orderId);
    Mail::to($order->email)->send(new Invoice($order));
  }
}

SendInvoice::dispatch($order->id);

// Console Command - теж реалізація патерну Command:
class SyncRates extends Command
{
  protected $signature = 'rates:sync';

  public function handle(): void
  {
    // sync
  }
}

// Планування у Laravel 11+ - через routes/console.php або bootstrap/app.php:
use Illuminate\Support\Facades\Schedule;

Schedule::command('rates:sync')->hourly();
```

### Де застосовувати

- Фонові задачі в черзі, заплановані команди, ретраї, CLI-інтерфейси.
- Коли дію треба відкласти, повторити або відокремити від місця виклику.

### Плюси та мінуси

- **+** Контролери стають тонкими, логіка переїжджає в команди.
- **+** Команди легко тестувати, ставити в чергу та планувати.
- **−** Більше класів і церемонії на просту дію.
- **−** Параметри краще передавати через DTO, а бізнес-правила тримати в сервісах, а не всередині job - інакше job розростається.
