За что, Битрикс? Или сказочный мир 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 Статья написана на скорую руку, сорь если не получилось выстроить последовательную цепочку мысли.

Источник: https://habr.com/ru/post/473672/


Интересные статьи

Интересные статьи

VUE.JS - это javascript фрэймворк, с версии 18.5 его добавили в ядро битрикса, поэтому можно его использовать из коробки.
Много всякого сыпется в мой ящик, в том числе и от Битрикса (справедливости ради стоит отметить, что я когда-то регистрировался на их сайте). Но вот мне надоели эти письма и я решил отписатьс...
1С Битрикс: Управление сайтом (БУС) - CMS №1 в России по версии портала “Рейтинг Рунета” за 2018 год. На рынке c 2003 года. За это время БУС не стоял на месте, обрастал новой функциональностью...
Автокэширование в 1с-Битрикс — хорошо развитая и довольно сложная система, позволяющая в разы уменьшить число обращений к базе данных и ускорить выполнение страниц.
Если Вы используете в своих проектах инфоблоки 2.0 и таблицы InnoDB, то есть шанс в один прекрасный момент столкнуться с ошибкой MySQL «SQL Error (1118): Row size too large. The maximum row si...