Архитектура «D7»: модули, классы, жизненный цикл Кирсанов Алексей Ведущий разработчик 1C-Битрикс
Основные принципы Сильное зацепление Каждая функциональность сосредоточена в одном месте, обязанности класса тесно связаны Паттерны проектирования Слабая связанность ООП
Ядро / API Модульная архитектура /bitrix/modules /local/modules Модули Главный модуль Доступ к данным Авторизация Конфигурация... Инфоблоки... Магазин Бизнес- процессы Компонент 1 Компонент 2... Данные
Пространство имен Bitrix Bitrix\Main Bitrix\Main\IO Bitrix\Forum Пространства имен и классы Для сторонних модулей mycompany.catalog MyCompany\Catalog Классы не делятся по типам баз данных - ORM Имена классов без префиксов и суффиксов Исключение: классы сущностей ORM, наследующие Bitrix\Main\Entity\DataManager, имеют суффикс Table (CultureTable, LanguageTable)
Структура файлов модуля Папка /lib /bitrix/modules/main/lib Имя файла – имя класса в нижнем регистре Путь к файлу учитывает пространство имен Bitrix\Main\Application /main/lib/application.php Bitrix\Main\IO\File /main/lib/io/file.php MyCompany\Catalog\Tax /mycompany.catalog/lib/tax.php Исключение: классы сущностей ORM, наследующие Bitrix\Main\Entity\DataManager Bitrix\Main\UserTable /main/lib/user.php
Порядок в именовании классов - автозагрузка при первом обращении Подключение Можно по прежнему регистрировать с помощью void Loader::registerAutoLoadClasses( $moduleName, array $arClasses ) Подключение модуля mixed Loader::includeModule($moduleName);
Идеология нулевой терпимости к ошибкам разработчика Ошибки Привет
Исключительная ситуация - не типичная ситуация, при которой не имеет смысла продолжать выполнение базового алгоритма. Исключения
Жизненный цикл Загрузчик Контекст Страница Приложение Ответ
Отвечает за инициализацию ядра и запуск на выполнение конкретного обработчика запроса Приложение (Application) Базовая точка входа (маршрутизатор) для обращения к глобальным сущностям ядра Bitrix\Main\Application Не зависит от конкретного хита HttpApplication CliApplication Одиночка / Singleton
Содержит запрос, ответ, текущего пользователя и т. п. Контекст (Context) Bitrix\Main\Context Отвечает за конкретный хит HttpContext CliContext
Выполняет конкретный скрипт, собирает тело ответа на основании шаблона страницы Страница (Page) Bitrix\Main\Page Обработчик конкретного запроса PublicPage AdminPage LightPage
Код страницы сайта Общая схема работы страницы Выбор файла ядра – выбор определенного типа приложения и определенного типа страницы
Код d7 Режим совместимости
Данные запроса Запрос (Request) Bitrix\Main\Request Доступен через контекст Bitrix\Main\HttpRequest
Получение результатов События Анонимные обработчики Новая форма
Общая архитектура классов API: Работа с БД MySQL (mysqli, Mysql), MS SQL, Oracle, NoSQL Пул соединений Bitrix\Main\DB\ConnectionPool Конкретные классы соединения, наследующие абстрактный класс Bitrix\Main\DB\Connection Конкретные классы формирования SQL запросов, наследующие Bitrix\Main\DB\SqlHelper Конкретные классы для работы с результатом выполнения запроса, наследующие Bitrix\Main\DB\Result
БД: Соединение Разные формы вызова выполнения запроса Получение соединения, именованные соединения
БД: Результаты Модификация результата Получение результатов запроса
Конфигурация \Bitrix\Main\Config\Option \Bitrix\Main\Config\Configuration \Bitrix\Main\Config
Файлы Path – работа с путями Bitrix\Main\IO Directory – работа с папками File – работа с файлами
Другие классы Bitrix\Main\Text Bitrix\Main\Data Bitrix\Main\Type Bitrix\Main\Web...
Спасибо за внимание! Вопросы?