Контроллер должен быть "тонким" - только маршрутизация, валидация, ответ:
// 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);
}
}