Куда выносить бизнес-логику из контроллера?

Ответ

Контроллер должен быть "тонким" - только маршрутизация, валидация, ответ:

// 1. Service - бизнес-логика
class OrderService {
    public function create(CreateOrderDTO $dto): Order {
        // валидация, расчеты, сохранение
    }
}

// 2. Action - одно действие (Single Action Class)
class CreateOrderAction {
    public function execute(CreateOrderDTO $dto): Order { /* ... */ }
}

// 3. Repository - работа с БД
class OrderRepository {
    public function findActive(): Collection {
        return Order::where('status', 'active')->get();
    }
}

// Контроллер
class OrderController {
    public function store(CreateOrderRequest $request, CreateOrderAction $action) {
        $order = $action->execute(CreateOrderDTO::fromRequest($request));
        return new OrderResource($order);
    }
}
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.