Слои: DTO, Repository, Service
Слоистая архитектура в проектах на Битриксе разделяет логику на типизированные DTO с валидацией, репозитории для изоляции источников данных (инфоблоки, Highload, ORM) и бизнес-сервисы с возвратом Result. Сервисы регистрируются в PSR-11 совместимом локаторе ServiceLocator, что позволяет повторно использовать одну и ту же логику в компонентах, AJAX-контроллерах и фоновых агентах.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Зачем выносить логику из компонентов
-
2
DTO и типобезопасность
-
3
Repository поверх инфоблоков и ORM
-
4
Сервисный слой и его границы
Материалы
Официальная документация
-
Service Locator Новая дока
-
Архитектура модулей: раздел «Классы модуля» Новая дока
Материалы BXMax
Проверь себя
Заказчик поменял порог бесплатной доставки, и сайт теперь показывает три разных значения. Что пошло не так архитектурно?
Правило живёт в шаблоне, в component_epilog и в обработчике события отдельно. Ему место в одном сервисе в lib модуля, который зовут компонент, контроллер и обработчик.
Чем DTO реквеста отличается от массива из $request->getPostList()?
У DTO типизированные readonly-свойства и атрибуты валидации NotEmpty и Length из Bitrix Main Validation Rule; контроллер получает его через автоваринг уже проверенным. Массив проверяет каждый метод заново или не проверяет вовсе.
Сервис зарегистрирован в .settings.php модуля, а ServiceLocator::get() бросает исключение «не найден». Почему?
Сервисы модуля регистрируются после Loader::includeModule(). Пока модуль не подключён, в контейнере их нет; глобальные сервисы из bitrix/.settings.php доступны сразу после инициализации ядра.
Репозиторий возвращает массивы в формате GetList с ключами и тильдой. Это слой?
Нет, это переименованный вызов API: хранилище протекает наружу. Репозиторий отдаёт DTO или объекты ORM и прячет способ хранения, чтобы инфоблок можно было заменить на highload-блок без правки сервисов.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить