Всем привет! Я Иванов Николай TeamLead из ПО3. Тема сегодняшнего доклада "Применение паттернов и структура модулей".
Сегодня у нас по плану:
- Вводная по паттернам;
- Структура модулей и как не создать спагетти код;
- Что такое DI и как его можно использовать в bitrix
- Автоматическая проверка вашего кода
По паттернам особо нового я ничего не могу вам сказать так как в интернете есть много различных источников где уже заменя все рассказывают на понятном языке.
На левом QR-code
Рекомендую ютуб канал: https://www.youtube.com/watch?v=xk5z6vZZjEA&list=PLoonZ8wII66hKbEvIVAZnp1h4CE-4Mtk4&index=2
Курс, где человек объясняет все очень хорошо и понятно с примерами реализаций.
На правом QR-code
Сайт: https://sourcemaking.com/design_patterns
Так же рекомендую сайт по паттернам, как их можно реализовать с примерами на различных языках плюс с разделением по категориям.
Категории:
- Поведенческие
- Структурные
- Порождающие
Предложение по самообучению, это выпускать дайджест с реализованным паттерном и описанием для чего он нужен и когда его лучше применять. И тут уже на выбор, внутри своего ПО чтобы обучение шло точечно внутри команды или на все ПО но тут главное чтобы все вникали. Как по мне лучше внутри команды т.к. получится разобрать более детально реализацию паттерна.
Давайте лучше мы разберем с вами как писать код в модулях, так чтобы нам или новым сотрудникам не становилось плохо, а тим лидам не пришлось погружать сотрудника в проект тратив кучу времени на это. Так же рассмотрим подход к разработке чтобы наш код был максимально переиспользуемый или легко расширяемый.
Пример /lib/Services/example1
Объяснение кода и директорий
Теперь обсудим что такое DI. DI - это метод, широко используемый в программировании и хорошо подходящий для разработки приложений. Следуя принципам DI, вы закладываете основу для хорошей архитектуры приложения в нашем случае это архитектура модуля.
Bitrix реализовал у себя такой подход и активно его развивает, позволяя использовать определенные точки приложения для их кастомизации и удобного использования не думая о зависимостях сервиса так как все покрывает данный подход.
Ссылки на документацию:
- https://dev.1c-bitrix.ru/api_d7/bitrix/main/di/servicelocator/index.php
- https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=14032
Пример /lib/Services/example2
Объяснение кода и директорий
Тут я бы хотел предупредить о злоупотреблении данного подхода, потому что можно сделать множество конфликтующих между собой кастомизации или код будет запутанным и тяжело поддерживаемым. Например, чтобы избежать данный проблемы, необходимо внутри команды согласовать или предупредить, написав README к проекту где будет описано, что уже и где используется и самое главное для чего.
Пример /lib/Services/example3
Объяснение кода и директорий
Таким примером может выступать кастомизация timeline в карточках crm. Если вы сделаете это в одном месте, то не будет никаких проблем. Другое дело если вы пытаетесь кастомизировать timeline из разных мест, что может привести к не очень хорошим последствиям и запутанности кода.
Теперь после того как мы разобрали структуру модулей, DI и хорошие источники для обучения паттернам проектирования, можно разобрать как проанализировать свой код на ошибки code style который используется на проекте.
PSR (PHP Standards Recommendations) — это набор рекомендаций по программированию на языке PHP. Основное назначение — предоставить проверенные общие концепции, чтобы сделать разработку простой и удобной, повысить надежность и работоспособность продуктов, так же в psr входит и форматирования кода.
Ссылка на описание psr: https://blog.skillfactory.ru/glossary/psr/
Пример не форматированного кода
Пример форматированного кода
Пример /lib/Services/example4
Разберем с вами стиль форматирования кода psr12.
Для начала стянем phar с phpcs
curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.pharВ корне проекта или модуля создаем файл phpcs.xml со следующей конфигурацией
<?xml version="1.0"?>
<ruleset name="PHP_CodeSniffer">
<description>PHP_CodeSniffer configuration</description>
<arg name="colors"/>
<arg value="p"/>
<arg value="s"/>
<arg name="report" value="code"/>
<arg name="extensions" value="php"/>
<rule ref="PSR12"/>
<rule ref="Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase">
<exclude-pattern>bootstrap.php</exclude-pattern>
</rule>
<rule ref="PSR1.Classes.ClassDeclaration.MissingNamespace">
<exclude-pattern>install/index.php</exclude-pattern>
</rule>
<rule ref="Squiz.Classes.ValidClassName.NotCamelCaps">
<exclude-pattern>install/index.php</exclude-pattern>
</rule>
<rule ref="PSR1.Methods.CamelCapsMethodName.NotCamelCaps">
<exclude-pattern>install/index.php</exclude-pattern>
</rule>
<rule ref="PSR1.Files.SideEffects.FoundWithSymbols">
<exclude-pattern>install/index.php</exclude-pattern>
</rule>
</ruleset>Объяснение кода и правил файла phpcs.xml
Как только настройку завершили, мы можем запустить проверку нашего кода
php phpcs.phar --standard=/var/www/bitrix/local/modules/iny.training/phpcs.xml --runtime-set testVersion 8.1 /var/www/bitrix/local/modules/iny.trainingПоказать пример отчета
Теперь вы можете валидировать свой код у себя на стенде вне ci/cd gitlab или других подобных системах
Всем спасибо за внимание!