Ответ
В последнем крупном проекте на Laravel мы использовали расширенную MVC-архитектуру с добавлением слоёв для лучшей поддерживаемости.
Основные компоненты:
- Модели (Eloquent) – работа с БД, базовые бизнес-правила.
- Контроллеры – тонкий слой для обработки HTTP-запросов и возврата ответов.
- Сервисный слой – основная бизнес-логика, вынесенная из контроллеров.
- Репозитории – абстракция для работы с данными, инкапсулирующая сложные запросы.
- DTO (Data Transfer Objects) – для строгой типизации данных между слоями.
- Action-классы – для инкапсуляции отдельных операций (например,
CreateOrderAction).
Пример структуры сервиса:
class OrderService
{
public function __construct(private OrderRepository $orderRepository) {}
public function createOrder(CreateOrderDto $dto): Order
{
// Валидация бизнес-правил
if ($dto->total <= 0) {
throw new InvalidOrderException('Order total must be positive.');
}
// Создание через репозиторий
return $this->orderRepository->create($dto->toArray());
}
}
Для API мы применяли RESTful-подход с использованием:
- Laravel API Resources для форматирования JSON-ответов.
- FormRequest-классы для централизованной валидации входящих данных.
- Модульную организацию по доменам (например,
AppDomainsOrder).