✅ 1. CONTROLLER — только HTTP и передача данных
Задачи контроллера:
-
Принять запрос (GET/POST)
-
Создать DTO из запроса:
RealEstateDTO::fromRequest($request) -
Передать DTO в Service
-
Получить результат от Service
-
Передать данные в View
-
Никакой бизнес-логики, никаких where(), никаких запросов к модели
Контроллер — тонкий.
✅ 2. DTO — извлечение и валидация входных данных
Задачи DTO:
-
Прочитать входные данные из Request
-
Привести типы: string → int, пустое → null
-
Сформировать:
-
$filters -
$sort -
$pagination -
$price_range -
$city,$city_id
-
-
Создать эономические методы:
-
getFilters() -
getSortOrders() -
getPage() -
getPerPage() -
buildCanonicalUrl() -
buildPriceRange()
-
DTO — фильтрация и нормализация данных + правила конвертации.
Никаких запросов к базе.
✅ 3. SERVICE — бизнес-логика
Задачи сервиса:
-
Принять DTO
-
Передать DTO → Filter → Repository
-
Выполнить бизнес-операции:
-
создание объекта
-
обновление объекта
-
сортировка
-
тумблеры (toggle)
-
привязка изображений
-
-
Конвертация DTO → entity → модель (insert/update)
Service — мозг приложения.
✅ 4. FILTER — подготовка query builder
Filter — это слой, который превращает DTO в SQL-запрос.
Задачи Filter:
-
Принять
$dto->getFilters() -
Применить:
-
where
-
like
-
between
-
orderBy
-
join
-
-
Поддержка:
-
$filter->where('city_id', 3) -
$filter->orderBy('price','DESC') -
$filter->paginate($page, $perPage)
-
Ничего не знает о Request, Service, Validation.
Filter — это SQL-конструктор.
✅ 5. MODEL — простая связь с конкретной таблицей
Задачи Model:
-
Точка входа в Query Builder
-
Описание таблицы
-
Soft deletes / timestamps
-
Методы:
-
getEntity($id) -
isOwnedBy($id, $userId) -
search()
-
-
Модель — это врата к базе, но не бизнес-логика.
Model — минимальная логика, только про таблицу.
✅ 6. REPOSITORY — доступ к данным
Repository — толстый слой для работы с базой.
Задачи Repository:
-
Выполнить Filter и Builder
-
Возвратить данные:
-
find
-
findAll
-
paginate
-
save/update
-
delete
-
-
Отвечает за работу со связями:
-
join cities
-
join users
-
eager loading (в будущем)
-
Repository — это слой, который заменяет работу с Model напрямую.
| Слой | Что делает | Что не делает |
|---|---|---|
| Controller | только request → DTO → service → view | логика, SQL |
| DTO | параметры, фильтры, сортировка, canonical | SQL, бизнес-логика |
| Service | операции над сущностями, вызывает Repository | не обращается к Request |
| Filter | строит SQL условие | не знает о Request |
| Repository | общение с Model и БД | бизнес-правила |
| Model | доступ к таблице, PK, timestamps | бизнес-логика |
Комментариев нет:
Отправить комментарий