Архитектура «D7»: модули, классы, жизненный цикл Кирсанов Алексей Ведущий разработчик 1C-Битрикс Основные принципы ООП Сильное зацепление Каждая функциональность сосредоточена в одном месте, обязанности класса тесно связаны Слабая связанность Паттерны проектирования Модули Модульная архитектура /bitrix/modules /local/modules Компонент 1 Компонент 2 ... Ядро / API Магазин Бизнеспроцессы Инфоблоки ... Главный модуль Данные Доступ к данным Авторизация Конфигурация ... Пространства имен и классы Пространство имен 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) Не зависит от конкретного хита Отвечает за инициализацию ядра и запуск на выполнение конкретного обработчика запроса Базовая точка входа (маршрутизатор) для обращения к глобальным сущностям ядра Одиночка / Singleton Bitrix\Main\Application HttpApplication CliApplication Контекст (Context) Отвечает за конкретный хит Содержит запрос, ответ, текущего пользователя и т. п. Bitrix\Main\Context HttpContext CliContext Страница (Page) Обработчик конкретного запроса Выполняет конкретный скрипт, собирает тело ответа на основании шаблона страницы Bitrix\Main\Page PublicPage AdminPage LightPage Код страницы сайта Общая схема работы страницы Выбор файла ядра – выбор определенного типа приложения и определенного типа страницы Код d7 Режим совместимости Запрос (Request) Доступен через контекст Данные запроса Bitrix\Main\Request Bitrix\Main\HttpRequest События Новая форма Получение результатов Анонимные обработчики Работа с БД MySQL (mysqli, Mysql), MS SQL, Oracle, NoSQL Общая архитектура классов API: Пул соединений Bitrix\Main\DB\ConnectionPool Конкретные классы соединения, наследующие абстрактный класс Bitrix\Main\DB\Connection Конкретные классы формирования SQL запросов, наследующие Bitrix\Main\DB\SqlHelper Конкретные классы для работы с результатом выполнения запроса, наследующие Bitrix\Main\DB\Result БД: Соединение Получение соединения, именованные соединения Разные формы вызова выполнения запроса БД: Результаты Получение результатов запроса Модификация результата Конфигурация \Bitrix\Main\Config \Bitrix\Main\Config\Configuration \Bitrix\Main\Config\Option Файлы Bitrix\Main\IO Path – работа с путями Directory – работа с папками File – работа с файлами Другие классы Bitrix\Main\Data Bitrix\Main\Text Bitrix\Main\Type Bitrix\Main\Web ... Спасибо за внимание! Вопросы?