[Из песочницы] За что, Битрикс? Или сказочный мир 1С

?v=1

Однажды, в понедельник, мне пришла в голову мысль — «а покопаюсь ка я в новом ядре» (новым относительно, но об этом позже). Мысль не появилась на ровном месте, а предпосылками для нее стали:


  • тестовое задание, от одной из крупных студий матушки-России (в котором фигурировала аббревиатура ORM),
  • идея написать простенький модуль,
  • желание одного из клиентов, в перспективе, сделать магазин.

Так вот, историей об этом походе, в густые тропические джунгли, я хочу поделиться.


Коротенькое предисловие

Я не считаю себя гуру программирования не на Битриксе, не на чем либо еще. В статье отражены мои наблюдения, опыт и мысли. Конструктивная критика приветствуется, как и аргументированные споры (как Сократ завещал). В предпосылках выделены три обширные темы, которые не будут рассматриваться. Как и их основной аспект — программирование работа с данными в рамках ядра Битрикса D7 (ORM), хотя и является основополагающим фактором для ее написания.


В омут с головй

Аспект работы с данными — основополагающий и без него никуда, подумал я и решил пойти сразу в гугл просмотреть документацию, в надежде на подробное описание и наличия примеров, ну и конечно заглянуть в курсы. С легкой руки и надеждой на что-то вкусное и новенькое. Не видя повода для беспокойства, я отправился в поход. Тучи сгущались…


Что нужно знать о джунглях или правила выживания


Правило №1 — Остерегайтесь недобросовестный тур агентов

Решил начать с курсов, увидев интересующие меня пункты меню (модуль и ORM), кучу текстов и вставок кода подумал — все будет быстро, поехали… Так совершилась моя очередная ошибка. По факту же, оказалось:


  • курсы плохо структурированы — порядок изучения не продуман, можно встретить отсутствие какой либо связи между главами;


  • постоянные ссылки — я не говорю про отсылки к документации, но ссылки на stack overflow и другие главы (в конце курсы, между которыми море информации) очень сильно отвлекают, это не серьезно;


  • вода и общие слова — галочку по количеству символов поставить можно;


    Жирный шрифт используется для выделения важных в смысловом значении слов, терминов, фраз и предложений. То есть то, что особенно важно в контексте описываемого функционала:

  • трактовка понятий на свой лад — это еще старая тема (API — Component — Template aka MVC);


  • вставки из документации — копипаст целых кусков, иногда просто, чтобы заполнить место;


  • цитаты разработчиков — тут просто слов нет -_-, зачем это бахвальство;


  • устаревшие главы — просто удалить их кажется нельзя, усиливают путаницу в разы.


    Взаимосвязи между сущностными (устаревший вариант) или Настройки скидок на товар

Конечно плюс в том, что курсы в принципе есть. Наверное плюс, ведь написать что-то только на их основе еще та задача. Ну да ладно. Просмотрев курсы, в основном вставки кода, решил пробовать, еще же есть документация. Дождь начинал моросить…


Правило №2 — Остерегайтесь густых зарослей

Сделав пару простых выборок используя скотч документацию, решил попробовать вывести скидку на товар. И тут начался ливень. Псевдоновое ядро и посхалочки:


  • два модуля для скидок — да да, я долго думал — почему я добавил скидку, в товаре она есть, но я не могу ее получить через класс сущности DiscountTable. Пришлось писать в поддержку. Ответ был такой:


DiscountTable — скидки на товар, принадлежат к модулю Торговый каталог, функционал устарел и не используется. Рекомендуем использовать Правила корзины.


  • отсутствие документации —, а можно получить ссылочку на документацию — спросил
    я. Ожидая, что с 2013–2015 она появилась. Ответ:


Документация по созданию Правил корзины пока находиться в разработке.


  • сценарии работы не продуманы — следующий мой вопрос был логичен — А как мне вывести скидку? На что я получил фееричный ответ и закончил общение с поддержкой:


Чтобы получить правила работы с корзиной, которые применяются к товару, вам необходимо будет создать объект корзины и выполнить расчет для товара.


  • незавершенный функционал — некоторые методы классов могут вернуть сообщения об ошибках на подобии:


Для добавления скидок на товар используйте вызов CCatalogDiscount: Add ()


  • сложная архитектура — для создания сложной выборки из нескольких таблиц используются специальные объекты отношений, которые нужно добавить в метод SomeTable::getMap(). Это не всегда просто (некоторые классы описания сущностей генерируются автоматически). Так же, огорчает факт, что сложную выборку получить просто в формате массива — нельзя. Да и конструкции отношений могут занимать не один десяток строк.
  • лабиринты функциональности — в D7 есть места которая постоянно переписываются и при этом все вариации поддерживаются. Те же объекты для отношений могут быть реализованы через: Entity\ReferenceField || Bitrix\Main\ORM\Fields\Relations || runtime (при запросе)

Все это очень удручает и заставляет негодовать, мягко говоря. А помимо этого еще и прочие неудобства есть.


Правило №3 — Чертовы насекомые

Битрикс имеет ряд странных и назойливых особенностей про, которые постоянно забываешь, но они вновь мелькают перед твоими глазами:


  • правила именования классов и файлов — свой автопогрузчик приводящий все к нижнему регистру, разные имена классов и файлов;
  • пути подключения сторонних решений — например composer или vue (которое просто содержится с библиотеке BX без каких либо явных причин и надстроек);
  • поддержка старого кода — куча лишних, ненужных классов и постоянная путаница;
  • забытые компоненты  — обновлялись только компоненты модуля iblock;
  • шаблоны компонентов — пресловутые и всем известные, с бизнес логикой на перевес;
  • неявная логика и проблемы кастомизацией — после изменения сценария заказа можно словить сложно уловимою ошибку и проблемы с модулями;
  • вездесущий статик — начинаешь думать, что это нормально;
  • спорная админка — местами не удобная и не адаптивная, а разрабатывать модули под нее… ммм;

Мелочи, но они постоянно рядом.


Правило №4 — Незнакомцы и туземцы бывают опасны

У Битрикса есть еще одно благо (нет) — большое сообщество. Ты можешь найти любую информацию, но ее правильность и релевантность будет под большим вопросом. За частую можно научиться только создавать костыли или использовать древний код, у которого уже есть адекватная замена. Но встречаются и мессии, способные указать путь своей пастве. Один из таких сказал:


Для работы с инфоблоками пользуйтесь старым ядром, которое хорошо и стабильно работает.

Думаю так и сделаю.


Правило №5 — Хищники где-то рядом

Маркетологи хвалящие продукт. Сравнительные статьи, где Битрикс безусловный лидер. Куча полу программистов, как собственно и я. Множество сайтов, которые просят закончить их мучения. Тоже бич сообщества.


Правило №6 — Имейте запасы воды

С каждой новой проблемой и отсутствием адекватного решения, мораль падает и ты пропускаешь ход приходят мысли, а нужно ли это все, к чему это трата времени. Может лучше фрэймворк, контейнеризация и непрерывная интеграция, а не эти полумеры. В таких случаях только волевое решение ну и спрос спасает ситуацию.


Правило №7 — Тропический дождь это тяжело

И добивает один мало приятный факт, на попытки программирования, поиск и структурирование информации, общение с знатоками и возвращения к пройденному, узнав что-то новенькое, уходит уйму времени, при отсутствии внятного результата — это постоянно угнетает.


Цивилизация aka выводы

И вот ты выходишь из джунглей, потрепанный, но живой, надломленный, но все еще не сломленный. Твои уставшие глаза открыты и они видят все. Путь, куда действительно стоит двигаться и тропы, где нужна особая осторожность.

Битрикс спорный продукт, говорить о том, что он вообще развивается развивается неправильно — не стоит. Но и говорить, что он лучший и не замечать недостатки — это слепо верить.

Для себя я определился, Битриксу — нет. Полный отказ, конечно, не получиться, но развиваться в продукте, в котором за 5 лет не появилась поддержка основного функционала и внятной документации, для нового и анонсированного ядра — смысла не вижу. Лучше написать простенькое решение, которое будет использоваться от проекта к проекту на старом ядре и идти изучать новенькое.

Старик франкинштэйн, конечно, достоин жизни, хотя бы пару достойных идей в нем есть. В конце концов, мы же не в средневековье, чтобы сжигать на кострах всех инакомыслящих. Или все таки стоит, что думаете?

P.S Статья написана на скорую руку, сорь если не получилось выстроить последовательную цепочку мысли.

© Habrahabr.ru