Хабрахабр

[Из песочницы] За что, Битрикс? Или сказочный мир 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 лет не появилась поддержка основного функционала и внятной документации, для нового и анонсированного ядра — смысла не вижу. Для себя я определился, Битриксу — нет. Лучше написать простенькое решение, которое будет использоваться от проекта к проекту на старом ядре и идти изучать новенькое.

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

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»