Pull to refresh

Comments 150

У BitrixFramework есть такое явление как D7 — это новое ядро. В нем переписано много чего
Не могли бы вы показать пару примеров из этого ядра? Глобальные переменные уже перестали использовать или ещё нет?

Вот здесь на самом деле соглашусь: очень хорошо разрекламированная система, с весьма сомнительным инструментарием для разработчика.
Битрикс очень популярная система, ее очень часто покупают, и люди готовы за нее платить. Так неужели не стоит с ней работать?
Хммм, мне одному видится здесь противоречие?
Не совсем. Я написал что можно работать с системой, хоть и не очень удобно. Статья же была для обывателя (как и собственно статья про минусы).
>> Не могли бы вы показать пару примеров из этого ядра? Глобальные переменные уже перестали использовать или ещё нет?

вот сравнение есть на просторах интернета
www.intervolga.ru/blog/bitrix/d7-analogi-lyubimykh-funktsiy-v-1s-bitriks

В общем стремятся не использовать глобальные переменные, но они все равно остались по всюду )

Я вот не понимаю, почему в битриксе никак не избавятся от global $APPLICATION и global $USER, две самые «популярные» переменные, а по новому с ними работать нельзя
Я вот не понимаю, почему в битриксе никак не избавятся от global $APPLICATION и global $USER, две самые «популярные» переменные, а по новому с ними работать нельзя

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

Я про это например:
$APPLICATION->IncludeComponent()
или про это:
$USER->IsAdmin()

есть же теперь класс
Bitrix\Main\Application

почему там нет метода IncludeComponent?
Потому что еще этот код не реализован. Задача же стоит не просто формально уйти от глобальных переменных и типа ООП теперь во весь рост.
Вполне возможно, что есть нужда вообще полностью пересмотреть работу $APPLICATION->IncludeComponent(). Не большой массив параметров передавать. Полноценная поддержка ООП компонентов, где наследоваться может не только код компонента, но и шаблоны, описания и параметры.
Благодарю! Давно ожидал подробный обзор лучших сторон битрикса с примерами кода, ссылками и развернутым объяснением, почему «здесь хорошо, а здесь плохо», без перехода на личности и вообще, сразу чувствуется подход профессионала.
Этот пост был не на это направлен, а на опровержение того, что написал человек, который откровенно в Битрикс не разбирается.
Я и поблагодарил вас за развернутое опровержение.
Опровержение? Без примеров кода, ссылок и развернутого объяснения? Мы на Хабре, тут принято опровергать с пруфами.
Это же вселенная битрикс. Достаточно общих слов и обвинения в непрофессионализме. Не переживайте.
Код скинул. А разве по вашему человек профессионал, если он пишет что в Битрис нельзя сделать интеграцию с 1С стандартными средствами, хотя по факту это можно сделать?
Пользователи Хабра очень просят вас выложить пример такой интеграции, чтобы вы подробно расписали(может, даже со скриншотами):
-«вот тут клик-клик нажали сюда, настроили то, хоп-хоп и готово: вот смотрите, вот тут у нас товар, вот тут он в Битриксе появился. Всё очень просто!»
Добавьте это и вас отблагодярят по хабровски. И желательно убрать наезды на автора другого поста. Лучше ничего не пишите про это, нафиг здесь такой срач.
А можно? Вот так стандартными средствами, без напильника для произвольной конфигурации? Так покажите как это делается, вместо такого сомнительного утверждения.
Вы произнесли запрещенные в 1С слова «произвольная конфигурация». Система выполнила недопустимую операцию, ваша лицензия аннулирована.
Формально обмен с 1С есть. Давайте все полюбуемся кодом компонента sale.export.1c, посмотрим как написан класс CAllSaleExport. На дворе 2016 год, такой обмен даром не нужен.
Интересненько. Статья про минусы не особо изобилует ссылками или кодом, за исключением кода, которым уже никто не пользуется. Но там это нормально, потому что для всех Битрикс априори говно. Еще раз говорю: моя статья опровергает ровно то, что написано в статье про минусы, и не более. Но видимо всем по хер.
Вы пытаетесь опровергнуть устоявшееся в обществе мнение. Кто говорил что будет легко?
Что-то мало для опровержения, 2 пункта с копейками. 3й пункт на ответ не тянет, к примеру если взять микрософт, то само с собой он интегрируется за пару щелчков, а не надо чей-то модуль переписывать.
Вы оригинал читали? Там больше написано? Я прокомментировал все пункты, которые приводятся там, на большее эта статья не расчитана
Так Вам и пытаются сказать что для комментариев есть специальная кнопка «Написать комментарий».
Благодарю! Давно ожидал подробный обзор лучших сторон битрикса с примерами кода, ссылками и развернутым объяснением, почему «здесь хорошо, а здесь плохо», без перехода на личности и вообще, сразу чувствуется подход профессионала.


Я конечно извиняюсь, но и оригинальная статья не особо развернута.
Хотелось бы чтобы не только «защита» какого-то продукта должна была быть развернутой и наполненной ссылками и примерами, но и «обвинение». Иначе это получается какая-то «презумпция виновности».
Есть такое слово «сарказм»
У Битрикса есть условное разделение частей системы на MVC
контроллер — это компонент (хотя по факту это виджет, а в некоторых случаях роутер — если говорить про компоненты из коробки)
модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)

Вот когда "условное разделение" и "делайте, что хотите", и говорят, что архитектуры нет. Архитектура обычно все-таки предполагает весьма четкие правила.

Битрикс позволяет следовать архитектуре, но не обязывает.

… благодаря чему можно легко получить хаос вместо архитектуры. Хотя бы сам Битрикс ей следует? Строго? Униформно?

Вообще нет))) Битрикс переписывает в основном модуль Магазина и все что с этим связанно. На остальное грубо говоря — пофиг. Но если говорить про архитектуру, то Битрикс ее поддерживает.

Унифицировано не получиться никогда, потому что компоненты пишут разные программеры, ив этом большая проблема Битрикс. Но почему сообщество программеров не может сами взять все в свои руки? Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.

Битрикс поддерживает свои компоненты, и раз вы работаете с компонентами из коробки, то терпите тот говнокод что у них есть. Если хоть немного есть скилов, пишите свои модули и компоненты и будет счастье.

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

они есть, именно соглашение по документированию кода, и по сути компоненты соответствуют ему, вот только получается все равно не круто.
Но почему сообщество программеров не может сами взять все в свои руки? Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.
Вероятно, потому что это коммерческий продукт.
Коммерческий для покупателей, разработчики не платят за Битрикс!
Покупатель платит разработчикам за доработки. А вы хотите, что бы он платил им за то, что они будут писать то, за что он уже заплатил.
Покупатель платит, за то что в коробке. Если его устраивает функционал по умолчанию, зачем его допиливать?
Но почему сообщество программеров не может сами взять все в свои руки? Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.

Действительно. Почему это люди не хотят своими силами писать движок за который перед этим заплатили?! Странные. Хотят за свои деньги получить готовое решение.
Еще раз: разработчики ничего не платили. В маркетплейсе много решений выложено, многие из которых бесплатные.
Я не силен в Битриксе, даже кода его не видил, но мне стало интересно: Битрикс позиционируется как CMS, фреймворк или библиотека?
1С -Битрикс позиционируется как готовая законченная система. О том и ср*чь разгор, против чего поднял вопрос топик-стартер.
На остальное грубо говоря — пофиг.

Вот потому, что пофиг, и нет архитектуры.


Унифицировано не получиться никогда, потому что компоненты пишут разные программеры, ив этом большая проблема Битрикс.

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


Но почему сообщество программеров не может сами взять все в свои руки?

Может. Но это уже не будет архитектурой битрикса.


Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.

Ну да, когда я беру продукт (кажется, еще и не бесплатный), у меня есть к нему вполне конкретные требования.


Битрикс поддерживает свои компоненты, и раз вы работаете с компонентами из коробки, то терпите тот говнокод что у них есть.

Ага, все-таки в компонентах из коробки — говнокод? Ну и зачем вы тогда спорите с тем фактом, что у Битрикса плохая архитектура?

Вот тоже за это глаз зацепился )
Вот отсутствие документации по новому ядру очень огорчает, особенно когда обновление ломает старое работающее, при чём и новое api не стоит на месте, а развивается, читай ломает, то что удалось починить, через найденые возможности в новом api.
И без документации можно изучить структуру классов, с начальным знанием английского языка (установите IDE в каждой из них есть всплывающие подсказки, и карта классов). Конечно не самые шикарное решение, но все таки решение.
Это совсем не решение. Вот аргумент метода getList
array(
    'select' => array('NAME'),
    'filter' => array('>CNT' => 5)
    'runtime' => array(
        new Entity\ExpressionField('CNT', 'COUNT(*)')
    )
)

Что из этого подскажет IDE?
IDE подскажет класс, а зайти в класс потратить пару минут на изучение — это уже скилл программиста.
К слову: данный класс расписан в документации.
Вообще, основные моменты все таки расписаны в документации.
IDE подскажет класс, а зайти в класс потратить пару минут на изучение — это уже скилл программиста.

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

А догадаться в этом месте сделать нормальный самодокументрируемый fluent-интерфейс для установки всех параметров — вот это уже больше похоже на скилл программиста
я же написал «то что удалось починить, через найденые возможности в новом api.»
Да, можно разобраться, именно это и приходится делать( а это время/деньги), чтобы перестали сыпаться на почту письма, от покупателей, которые обновили битрикс и у них в лучшем случаем модуль перестал работать.
Можно даже найти нужную замену, уточнить в тех. поддержке, получить ответ: «Да это новое API можно использовать, оно на долго» и через месяц они уже опять меняют его.
Ради приличия добавьте хоть ссылки на «Как правильно» и «Почему так не надо делать». Иначе получается не статья, а оправдание какое-то, со странными аргументами в конце.
По сути только про новое ядро ссылки нужно, они есть (добавил).
> В русскоязычном сегменте Интернета существует такой интересный феномен, как хейтеры Битрикс.
Это как раз не феномен. Вот если бы найти человека, который положительно относится к Битриксу, и при этом занимается его поддержкой, а не продажами, вот это будет феномен :)
Скоро увидите)))
Сергей Рыжиков наверное читает этот пост и плачет.
Не понятно, расшифруйте…
google -> Сергей Рыжиков
ну или совсем по простому — https://habrahabr.ru/users/Rizhikov/
Я знаю кто это, я не понимаю причину слез…
Сколько вам заплатили месье? Надеюсь много… :)
Я тоже надеюсь))
> Но кто мешает написать свой компонент, так как надо?
Собственно, это 80% кейсов нестандартной конфигурации Битрикс. Легче взять не-Битрикс с кучей разъяснений на Stack Overflow.
Клиенты Битрикс за вами не последуют)
Я никогда не работал с битриксом, не знаю что у вас там творится, но эта фраза звучит как то по сектантски…
Статья на которую вы ссылаетесь, на мой взгляд, получила неоправдано высокий рейтинг. Но ваш ответ — скорее уровень комментария к той статье, а не отдельного хабратопика.

оффтоп
Нда, ~100 рейтинга за пост формата
Вступление: плохо плохо плохо
1. плохо
2. плохо + кусочек кода
3. плохо
вывод — плохо

Это жесть.
Вы правы, но комментарий бы затерялся где нибудь в дали, так что решил пожертвовать свою карму, на это неблагодарное дело. Причем мне кажется, что множество дизлайков я получить от Битриксоидов с позицией «Да на хер что-то делать, есть готовые модули, будем их править».
А вообще рейтинг у статьи на которую я ссылаюсь высокий, только потому что статья «указывает» на минусы Битрикс, и у всех (кто даже не работал с ним) сложилось негативное впечатление о системе.
Только жертва была напрасной, и карму слил, и доказать ничего не доказал.
UFO just landed and posted this here
Нам его навязала веб-студия и позднее стало понятно почему — Битрикс обеспечивает постоянный доход для них.
Сайт с ним нельзя сделать один раз и забыть до ребрендинга, надо постоянно ставить обновления и проверять/доводить после этого.
UFO just landed and posted this here
Вот тут всё сказано: http://govnokod.ru/search?search=Bitrix :)
А кто писал это говно? Можно решить данную задачу иначе, с помощью Битрикса, но никто не заморачивается, потому что Битрикс для всех по-умолчанию не очень. Можно с таким же успехом написать говнокод на Yii, а потом говорить что фреймворк не очень!
На Yii тоже можно написать говнокод, я видел такое, я с ним работал. Он мне по наследству достался. Но совсем сильно нагадить не выйдет, архитектура не позволит.
Безусловно можно. Вот только, в большинстве фреймворков, хотя бы код самого фреймворка достаточно приличен. Чего в случае Битрикса и близко не наблюдается, ни в ядре, ни в стандартных компонентах.
Раз уж автор упомянул про код и привел один участок, то приведу то, что в стандартном шаблоне битрикса после установки
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Интернет-магазин \"Одежда\"");
?>
<h2>Лучшие коллекции</h2>
<?$APPLICATION->IncludeComponent("bitrix:catalog.top", "", array(
    "IBLOCK_TYPE_ID" => "catalog",
    "IBLOCK_ID" => "2",
    "ELEMENT_SORT_FIELD" => "name",
    "ELEMENT_SORT_ORDER" => "asc",
    "ELEMENT_SORT_FIELD2" => "name",
    "ELEMENT_SORT_ORDER2" => "asc",
    "HIDE_NOT_AVAILABLE" => "N",
    "ELEMENT_COUNT" => "8",
    "LINE_ELEMENT_COUNT" => "4",
    "PROPERTY_CODE" => array(0=>"MINIMUM_PRICE",1=>"MAXIMUM_PRICE",2=>"",),
    "OFFERS_FIELD_CODE" => array(0=>"NAME",1=>"",),
    "OFFERS_PROPERTY_CODE" => array(0=>"ARTNUMBER",1=>"COLOR_REF",2=>"SIZES_SHOES",3=>"SIZES_CLOTHES",4=>"MORE_PHOTO",5=>"",),
    "OFFERS_SORT_FIELD" => "sort",
    "OFFERS_SORT_ORDER" => "asc",
    "OFFERS_SORT_FIELD2" => "id",
    "OFFERS_SORT_ORDER2" => "desc",
    "OFFERS_LIMIT" => "0",
    "VIEW_MODE" => "SLIDER",
    "TEMPLATE_THEME" => "site",
    "PRODUCT_DISPLAY_MODE" => "Y",
    "ADD_PICT_PROP" => "MORE_PHOTO",
    "LABEL_PROP" => "NEWPRODUCT",
    "OFFER_ADD_PICT_PROP" => "MORE_PHOTO",
    "OFFER_TREE_PROPS" => array(0=>"COLOR_REF",1=>"SIZES_SHOES",2=>"SIZES_CLOTHES",),
    "SHOW_DISCOUNT_PERCENT" => "Y",
    "SHOW_OLD_PRICE" => "Y",
    "ROTATE_TIMER" => "30",
    "MESS_BTN_BUY" => "Купить",
    "MESS_BTN_ADD_TO_BASKET" => "В корзину",
    "MESS_BTN_DETAIL" => "Подробнее",
    "MESS_NOT_AVAILABLE" => "Нет в наличии",
    "SECTION_URL" => "",
    "DETAIL_URL" => "",
    "BASKET_URL" => "/personal/cart/",
    "ACTION_VARIABLE" => "action",
    "PRODUCT_ID_VARIABLE" => "id_slider",
    "PRODUCT_QUANTITY_VARIABLE" => "quantity",
    "PRODUCT_PROPS_VARIABLE" => "prop",
    "SECTION_ID_VARIABLE" => "SECTION_ID",
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "180",
    "CACHE_GROUPS" => "Y",
    "DISPLAY_COMPARE" => "N",
    "PRICE_CODE" => array(0=>"BASE",),
    "USE_PRICE_COUNT" => "N",
    "SHOW_PRICE_COUNT" => "1",
    "PRICE_VAT_INCLUDE" => "Y",
    "PRODUCT_PROPERTIES" => array(),
    "USE_PRODUCT_QUANTITY" => "Y",
    "CONVERT_CURRENCY" => "N",
    "OFFERS_CART_PROPERTIES" => array(0=>"ARTNUMBER",1=>"COLOR_REF",2=>"SIZES_SHOES",3=>"SIZES_CLOTHES",)
  ),
  false
);?>
<h2>Тренды сезона</h2>
<?$APPLICATION->IncludeComponent(
  "bitrix:catalog.top",
  "",
  Array(
    "IBLOCK_TYPE" => "catalog",
    "IBLOCK_ID" => "2",
    "VIEW_MODE" => "SECTION",
    "TEMPLATE_THEME" => "site",
    "PRODUCT_DISPLAY_MODE" => "Y",
    "ADD_PICT_PROP" => "MORE_PHOTO",
    "LABEL_PROP" => "NEWPRODUCT",
    "OFFER_ADD_PICT_PROP" => "MORE_PHOTO",
    "OFFER_TREE_PROPS" => array("COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES"),
    "SHOW_DISCOUNT_PERCENT" => "Y",
    "SHOW_OLD_PRICE" => "Y",
    "MESS_BTN_BUY" => "Купить",
    "MESS_BTN_ADD_TO_BASKET" => "В корзину",
    "MESS_BTN_DETAIL" => "Подробнее",
    "MESS_NOT_AVAILABLE" => "Нет в наличии",
    "ELEMENT_SORT_FIELD" => "sort",
    "ELEMENT_SORT_ORDER" => "asc",
    "ELEMENT_SORT_FIELD2" => "name",
    "ELEMENT_SORT_ORDER2" => "asc",
    "SECTION_URL" => "",
    "DETAIL_URL" => "",
    "BASKET_URL" => "/personal/cart/",
    "ACTION_VARIABLE" => "action",
    "PRODUCT_ID_VARIABLE" => "id_section",
    "PRODUCT_QUANTITY_VARIABLE" => "quantity",
    "PRODUCT_PROPS_VARIABLE" => "prop",
    "SECTION_ID_VARIABLE" => "SECTION_ID",
    "DISPLAY_COMPARE" => "N",
    "ELEMENT_COUNT" => "12",
    "LINE_ELEMENT_COUNT" => "4",
    "PROPERTY_CODE" => array("MINIMUM_PRICE", "MAXIMUM_PRICE"),
    "OFFERS_FIELD_CODE" => array("NAME"),
    "OFFERS_PROPERTY_CODE" => array("ARTNUMBER", "COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES", "MORE_PHOTO"),
    "OFFERS_SORT_FIELD" => "sort",
    "OFFERS_SORT_ORDER" => "asc",
    "OFFERS_SORT_FIELD2" => "id",
    "OFFERS_SORT_ORDER2" => "desc",
    "OFFERS_LIMIT" => "0",
    "PRICE_CODE" => array("BASE"),
    "USE_PRICE_COUNT" => "N",
    "SHOW_PRICE_COUNT" => "1",
    "PRICE_VAT_INCLUDE" => "Y",
    "PRODUCT_PROPERTIES" => array(),
    "USE_PRODUCT_QUANTITY" => "Y",
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "180",
    "CACHE_GROUPS" => "Y",
    "HIDE_NOT_AVAILABLE" => "N",
    "CONVERT_CURRENCY" => "N",
    "OFFERS_CART_PROPERTIES" => array("ARTNUMBER", "COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES")
  )
);?>
<?$APPLICATION->IncludeComponent("bitrix:sale.bestsellers", ".default", array(
    "HIDE_NOT_AVAILABLE" => "N",
    "SHOW_DISCOUNT_PERCENT" => "Y",
    "PRODUCT_SUBSCRIPTION" => "Y",
    "SHOW_NAME" => "Y",
    "SHOW_IMAGE" => "Y",
    "MESS_BTN_BUY" => "Купить",
    "MESS_BTN_DETAIL" => "Подробнее",
    "MESS_NOT_AVAILABLE" => "Нет в наличии",
    "MESS_BTN_SUBSCRIBE" => "Подписаться",
    "PAGE_ELEMENT_COUNT" => "4",
    "LINE_ELEMENT_COUNT" => "4",
    "TEMPLATE_THEME" => "site",
    "DETAIL_URL" => "",
    "AJAX_MODE" => "N",
    "AJAX_OPTION_JUMP" => "N",
    "AJAX_OPTION_STYLE" => "Y",
    "AJAX_OPTION_HISTORY" => "N",
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "86400",
    "BY" => "AMOUNT",
    "PERIOD" => "30",
    "FILTER" => array(
      0 => "CANCELED",
      1 => "ALLOW_DELIVERY",
      2 => "PAYED",
      3 => "DEDUCTED",
      4 => "N",
      5 => "P",
      6 => "F",
    ),
    "DISPLAY_COMPARE" => "N",
    "SHOW_OLD_PRICE" => "N",
    "PRICE_CODE" => array(
      0 => "BASE",
    ),
    "SHOW_PRICE_COUNT" => "1",
    "PRICE_VAT_INCLUDE" => "Y",
    "CONVERT_CURRENCY" => "N",
    "BASKET_URL" => "/personal/cart/",
    "ACTION_VARIABLE" => "action",
    "PRODUCT_ID_VARIABLE" => "id",
    "PRODUCT_QUANTITY_VARIABLE" => "quantity",
    "ADD_PROPERTIES_TO_BASKET" => "Y",
    "PRODUCT_PROPS_VARIABLE" => "prop",
    "PARTIAL_PRODUCT_PROPERTIES" => "N",
    "USE_PRODUCT_QUANTITY" => "N",
    "SHOW_PRODUCTS_2" => "Y",
    "CART_PROPERTIES_2" => array(
      0 => "BRAND_REF",
      1 => "NEWPRODUCT",
      2 => "SALELEADER",
      3 => "",
    ),
    "ADDITIONAL_PICT_PROP_2" => "MORE_PHOTO",
    "LABEL_PROP_2" => "SALELEADER",
    "CART_PROPERTIES_3" => array(
      0 => "COLOR_REF",
      1 => "SIZES_SHOES",
      2 => "SIZES_CLOTHES",
      3 => "",
    ),
    "ADDITIONAL_PICT_PROP_3" => "MORE_PHOTO",
    "OFFER_TREE_PROPS_3" => array(
      0 => "COLOR_REF",
      1 => "SIZES_SHOES",
      2 => "SIZES_CLOTHES",
    ),
    "AJAX_OPTION_ADDITIONAL" => ""
  )
);?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

да, детка, это так круто, современно и следует всем стандартам и принципам.
Ну а
Примеры кода из D7

Звучит как оправдание, типа «смотрите ребята, в битриксе есть кусок, при взгляде на который понятно, что он делает».
По вашей аналогии с машиной — посади водителя формлы 1 в запорожец — ему точно не понравится. Так и нормальным программистам не нравится битрикс. Как ни крути, запарожец феррари не обгонит
А нормальность чем определяется?

Про коробку написано в статье. Про пример D7: ниже написано, что на старом ядре это не решить, читайте полностью, а не поверхностно.

Ради лайков коммент писали что ли? Извините, я уже не могу ничего лайкать, написал статью на свою голову)))
нормальность определяется нормальной документацией, следованием стандартам (если не в курсе, есть к примеру psr-2).
В битриксе же тонны ужаса тянутся с момента его появления из глубин ада на свет для обратной совместимости, и лучше это никогда не станет, рано или поздно придет время выбирать — или поддерживать все, что написали ранее, или переписать все по человечески.
Но пока работают маркетологи, люди будут это хавать и даже защищать, а в сторону других вещей даже смотреть не будут. Меня один знакомый просил поправить мелочь в магазине на OpenCart, потому что его знакомый-битриксойд не смог разобраться даже в этом. Зато спец с опытом, в веб-разработке весьма долго.
модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)

Модель это таки модель в общепринятом понятии MVC или таки API (а-ля ServiceLayer)?
«Писать как хотите» — никак не тянет на архитектуру.
А что такое модель в общепринятом понимаю MVC, ActivRecord??? Модель — это бизнес-логика, паттерны которые я перечислил, это способы реализации модели.
Бизнес-логика это ServiceLayer, который оперирует моделями в том числе.
А модель — это часть системы которая отвечает за работу с данными конкретного объекта/сущности/етц.
Где-то это AR, где-то Manager/Entity.
Но никак ServiceLayer.

У Вас же получается, что модель — это все разом, и AR, и Manager/Entity подход ServiceLayer, что и вызывает батхерт.
А я не говорил что модель это ServiceLayer, и модель это уж точно не AR и DM.
Модель, т.е. бизнес-логика (почему вы модель от БЛ отделили?) — это по сути объект, который уже обращается к SL, AR, DM,…
Бизнес логика по сути отдельная сущность, к примеру есть библиотека расчёта цен, есть модель которая получает данные о цене, есть контролер и наконец вивер, но это не важно, бизнес логика лежит в какой то библиотеке отдельно, позволяя менять архитектуру приложения (по сути клиента) как вам хочеться, но при этом не боясь потере важного функционала(расчёт цен, налогов, таксы других финансовых операций).
Справедливости ради надо отметить, что это весьма холиварная тема: ADM против RDM. Есть несколько трактований понятия «Модель» и пара лагерей, которые кидают друг в друга какашками.

Но в общем случае модель — это не только данные, но и методы по их обработке. А вот где они находятся — в сервисах или в других классах — вопрос десятый.
Спасибо за статью, очень понравилось, теперь точно никогда не буду использовать битрикс и всех буду отговаривать.
https://www.youtube.com/watch?v=280f6PFEayc
похоже что пост лишь добавил хейта на битрикс:)
В этой статье как и в обозреваемой, ничего конкретного, будто не статья а «прения».

offtopЧто-то мне подсказывает что следующую статью назовут:

Обзор «Обзор обзора».

По поводу данной и оригинальной статьи промолчу, все было сказано уже.
Мне вот интересно, а какие альтернативы битриксу народ использует в реалиях связки с 1С? Magento?

А для каких целей Вам нужна альтернатива? Синхронизировать цены-товары — раз вдень (импорт-экспорт xml)? или заказы? Bitrix — работает из коробки(почти) и согласно описанию(почти), но если вам нужно чуть больше «фишечек» то эта статья и предыдущие, а точнее коментарии к ним, скорей всего разубедят Вас использовать Bitrix, и Вам «прийдеться» использовать свою маженту-престу и.т.д. Да будет сложно заставить найти общий язык администраторасайта-phpпрограмиста с 1с-програмистом.
если зарыться поглубже можно нарваться на спагетти в нескольких местах
Местами. Например их AR и UrlManager — и тот и другой расширить очень сложно не переписав половину класса. Не просто так разработчики решили написать Yii2.
В том-то и дело, в некоторых местах, в bitrix говнокод — повсеместно.
модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)


ActiveRecord в битриксе, где?! на дворе 2016 год, а модели битрикса методом getList до сих пор возвращают объект Main\DB\Result вместо массива из экземпляров класса модели, это не модели а плевок в лицо сообществу разработчиков.

bitrix не заводится на php7, и вряд ли заведется с огромным количество мусора в коде ядра, что уже говорит многом.

интернет-магазин веников с 5-ю наименованиями на битриксе — да пожалуйста, но делать на нем серьезные проекты это трудочасы в никуда — все равно в итоге переделывать придется на что-то другое.
Эльдорадо на Битриксе. Это им не мешает быть серьёзным проектом.
С php7 сейчас как раз ведутся работы. Скоро и на нем будет запускаться. пока парочка модулей из всех не работает, скрытые ошибки не смотрел.
откуда вам знать что они не перетащили весь основной функционал на другой фреймворк/апи и от битрикса не осталась только авторизация и система рендера шаблонов?

оно заметно что ведутся, обновления ломает напрочь тебе сайт и не дает откатиться обратно
Слышал, что они вроде как собираются переписать с Битрикса. Не знаю, правда или нет.
Эльдорадо НЕ на Битриксе, а на Java платформе для инет коммерции Hybris. Они ушли от Битрикса.
Вот доказательство
hh.ru/vacancy/10488581?customDomain=1
Они ушли от битрикса, вы уверены? Уже ушли?
Вы уверены? А открыть исходный код их главной страницы попробуйте: http://www.eldorado.ru/
И посчитайте сколько там раз встречается слово bitrix. Я 9 раз насчитал. Это при том, что они статику с отдельного домена отдают.
Там еще масса следов, показывающих, что это битрикс.
Может быть они и собираются уйти, но сейчас у них отдача контента битриксом идет.
Ок, я вас понял. Посещаемость в 500к-1кк в сутки для интернет-магазина, это не серьёзный проект. Серьёзность определяется временем загрузки страницы. Справедливости ради, если б у меня был такой магазин, мне бы хватило денег на собственное решение, а не на Битриксе или любом другом фреймворке.
Я еще такого не видел, чтобы кто-то серьезно отстаивал чужое д*рьмо да еще и так уверенно. Давайте взглянем хотя бы сюда:
Примеры кода из D7 (выгрузка названий элементов, количество которых больше 5):

ElementTable::getList(array(
'select' => array('NAME'),
'filter' => array('>CNT' => 5)
'runtime' => array(
new Entity\ExpressionField('CNT', 'COUNT(*)')
)
));

Вы считаете это адекватным кодом? Передачу массива ключ-значение, по факту 'критерий' -> 'значение' в стат. метод класса? Без инкаспуляции, полиморфизма… Да блин, взгляните вы в symfony, laravel и подобные, где реализован ORM/ActiveRecord — все они спроектированы так, что даже не имея под рукой документации интуитивно понятно можно составить запрос в базу.
Взгляните сюда — это действительно удачный пример, или сюда. Если считаете себя «опытным» php-программистом то взгляните на реализацию логики работы их activerecord/queryBuilder моделей и вы поймете, насколько вы заблуждались с адекватностью битрикса и его нового ядра.
Автор статьи просто не опытен и не в курсе, что getList в D7 — это просто обертка, которая реализует привычный синтаксис.
На самом деле там лежит объект Query. Все примерно так, как вы привели в своих ссылках.
Вот его описание в документации: http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=5751
Вы так и не поняли смысла моего сообщения. То, что приведено по вашей ссылке не меньший ад чем код автора в этой статье. Еще раз, обратите внимание на выражения инкаспуляция и полиморфизм. Если не понятно — обратите внимание на динамическую модель у тех примеров, что привел я, и на то, что вы показываете в битриксе (дикий адовый п**дец с передачей массивов с неизвестными параметрами и значениями) — про такой код чаще всего говорят: «Когда я начинал писать этот код только бог и я знали как он работает. Теперь остался только бог».
Вы ссылку открывали: http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=5751?
Вторую часть первой вставки кода посмотрите.
Этот код подобен коду из вашей ссылки: http://www.yiiframework.com/doc-2.0/yii-db-query.html
Кстати, почему вы говорите о неизвестных параметрах? Набор параметров строго определен и вольностей здесь нет.
Так же в ваших эмоциональных выражениях кроме эмоций нет ничего. Объясните чем это плохо и какие проблемы создает?
А что скажите про такой баг http://dev.1c-bitrix.ru/community/forums/messages/forum6/topic73598/message384042/#message384042?
Ладно бы его уже его исправили, но нет. Скоро уже год будет этому багу…
Хорошая попытка, Битрикс, но нет.

Автор выбрал элегантный способ хабрасуицида :)
но если говорить про сравнение, то это тоже самое что смотреть код Yii 1, и говорить что там говнокод.

ElementTable::getList(array(
    'select' => array('NAME'),
    'filter' => array('>CNT' => 5)
    'runtime' => array(
        new Entity\ExpressionField('CNT', 'COUNT(*)')
    )
));


Забавно, что эта, так называемая, «ORM» (хотя что-то мне подсказывает, что до ORM там далеко, но т.к. детально код не смотрел, утверждать не берусь), своим способом конфигурации подозрительно напоминает упомянутый вами AR в Yii1 как пример говнокода (там тоже можно было проинициализировать CDbCriteria магическим массивом): http://www.yiiframework.com/doc/guide/1.1/ru/database.ar

Да и даже в устаревшем Yii1 код и, в частности, ORM, гораздо лучше.
ЖЫРНЫМ выделено мной:
контроллер — это компонент (хотя по факту это виджет, а в некоторых случаях роутер — если говорить про компоненты из коробки)
Контоллер, виджет, роутер!? Вы разницу понимаете?
модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)
Не, API — это нечто другое. Модель — это модель. А Application Programming Interface — совершенно другое. Я категорически против, что бы с моей моделью делали что хотели. Бл*ть, инкапсуляция — это один из основополагающих принципов ООП!
представление — это шаблоны. Тут все как надо, есть темы, есть шаблоны, все океюшки
Да, тут все как надо. С условием, что это «как надо» нельзя будет редактировать из админки (если кто не в курсе — в Битриксе можно редактировать код приложения из админки. Но это я так понимаю и есть одна из «фишек» ).

PS: Я не хейтер Битрикса. С этой системой я работал недостаточно для широко развернутого поста (в ту или иную сторону). Высказал только свое IMHO.
PPS: Битрикс, перепишите к черту свою систему заново, в ней нет ничего такого за что стоит цепляться и взращивать монстра.
Bitrix, продукт сам в себе, недаром существует BitrixVM.
Но меня всегда смущало, почему php_admin_value open_basedir «none»?
А меня, вот, куда больше смущает, что битрикс создаёт тонны php файлов, от пользователя, под которым запущен веб сервер.
И после этого, становится понятно, почему в CMS приходится встраивать антивирус…
~45 000 файлов для CMS-ки это конечно мощно. Причем добрых 20% занимают однострочные конструкции типа

<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/tools/calendar.php");
?>
А что побудило разработчиков именовать, к примеру, атрибуты таблиц БД заглавными буквами?
UFO just landed and posted this here
Два года работал на проектах основанных на битрикс, были проекты с интернет магазинами со стандартной и кастомной синхронизацией с 1С, и другими е-коммерц системами. Ничего хорошего в защиту этой поделки сказать не могу.
Неудобная архитектура (? cкорее даже фреймворк), постоянные сбои с выгрузками со стороны 1C, проблемы со встроенными инструментами (визуальный ректор) огромные размеры дистрибьютивов, и просто фантастические требования к серверу — чем не хейтерство?
Хотя да, если вы хотите очень быстро открыть простой интернет магазин взяв за основу нормальную базу 1С и шаблонный дизайн, то это правильный выбор. Правда при всех выше указаных вещах скорее всего вам не нужен интернет магазин.
Все выше сказаное имхо, и на состояние 2 года назад.
Платят за систему не те люди которым потом работать с ней, ну а раз заплатили то приходится вертеться чтобы работало, а снаружи-то не видно каких усилий это стоило и на какие костыли пришлось пойти чтобы «через неделю уже должно работать!».
Тоже пример из жизни: год работал в студии, которая делала сайты на битрикс, причем сайты достаточно серьезных клиентов. Поступив на «службу», был обязан пройти тестирование и сертификацию на сайте 1c.bitrix.ru и овладеть всеми навыками работы. Прошел, получил. Каждый новый проект вызывал рвотные позывы и все убеждения моего шефа, что весь код должен быть реализован только на API Bitrix приводили к часовым спорам и в итоге я брал и писал весь функционал на голом php, с добавлением ООП и фронтенд на jquery и др. Остались даже некоторые сделанные мной компоненты — корзина интернет магазина, система вывода информации по избирательным участкам и новостной агрегатор. Сравнительно недавно вернулся к одному проекту на битриксе и потратил уйму времени, чтобы вспомнить основы работы с API и доделать какие то штуки. Единственное, что мне нравилось в нем — это визуальный редактор, выбираем нужный блок и редактируем его свойства, практически без необходимости лезть в код.
Извините, но может быть вам стоило уволиться, чем себя так мучится?
Это на любой системе, хоть битрикс, хоть джомла, хоть друпал и любая другая, не правильно брать и нарушая все правила писать на голом php, делать прямые запросы и реализовывать свой код внутри системы.
А потом придет другой разработчик, и будет ругаться, что это за битрикс такой плохой, что тут ничего не понять?
Дак я и уволился. Основной API естественно писался на кодобазе битрикса, но все вокруг делалось на голом php — это сберегло мне время и нервы.
На голом php не может быть быстрее по определению (но есть нюансы). Вы просто не знали как нужно это правильно делать. Я уверен на 99%, что именно так дело и обстояло.
Так же не совсем понятно, что значит «голый php»? Вы вместо написания компонентов, прямо php код на публичных страницах размещали, делали прямые запросы к бд (возможно к таблицам инфоблоков запросы?)?
Приведите пару примеров того, что вы делали на голом php и как вы это все реализовали.
Код компонентов сейчас не под рукой, но в любом случае вся структура кода самих компонентов реализована на API битрикса. Точно помню, что когда была поставлена задача реализовать простую корзину заказов товаров (без оплаты и прочих наваротов) — добавление товаров и последующая передача этого списка на почтовый адрес магазина с указанием реквизитов заказчика, то вывод товаров сделан с применением (дай Бог памяти) news.list (вывод данных инфоблока товаров), а сам функционал корзины сделан отдельным классом php, с передачей и хранением параметров в localstorage (jquery). Никаких прямых запросов к БД.
Это была версия с магазином? Т. е. вы реализовали корзину в обход штатных средств? А как же оформление заказа? Ведь оно не будет брать товары из вашей корзины.
И почему localstorage? Для авторизованного пользователя так же? Т. е. если я добавил товары в корзины с одного компьютера, а захотел оформить заказ с другого: у меня это не получиться?

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

Но я допускаю вариант того, что у вас идет просто игра слов. Вы используете всю структуру битрикса, его API, а там где функционал битрикса не покрывается задачи заказчика, то все разработчики пишут на «голом PHP». Создают свои компоненты или модули и реализуют там свой код.
Например, в вашем случае может быть так, что вы реализовали на младшей редакции, без интернет магазина некоторую упрощенную корзину, которая в простом варианте позволяет вам оформлять заказы (если эти две вещи совместить). Но здесь нет ничего сверхъестественного: так делают большинство разработчиков на битриксе.
Версия действительно была по-моему standart. Повторюсь, не стояла задача делать оформление заказа — простой список с ячейкой количества позиции, кнопка добавить, все это открывается в лайтбоксе с формой ввода контактной информации и кнопкой «Отправить». Про корзину и оплату — это естественно, просто объединил это в 1 единицу в данном случае (процессинг и оформление заказа в идеальном и цельном варианте).
За свою многолетнию практику пришлось использовать битрикс 1 раз — это был госзаказ, и заказчик прямо сказал, что «нужно просто распилить деньги за дорогой продукт, а результат не важен».
«Недавно прочитал обзор того парня и мне есть что сказать». Мы превращаемся в филиал задолба! ли… ;(
UFO just landed and posted this here
А что вы имеете против против статических методов? Везде только динамика, по вашему?
А как вы их предложите тестировать?
Начиная с версии 5.3 можете использовать позднее статическое связывание.
А вообще, когда вы пишете код не только для себя, а для других. Когда ваше API будут использовать, то нужно думать и об удобстве использования. Писать десятки строк кода, для того чтобы просто узнать есть ли элемент в таблице с таким ID — это избыточно.
При этом ваши статические методы могут быть обертками над кодом, выстроенным динамически.
Когда ваше API будут использовать, то нужно думать и об удобстве использ2ования.

И что, работа с экземплярами как-то мешает удобству использования?


При этом ваши статические методы могут быть обертками над кодом, выстроенным динамически.

Эм, а вы не в курсе, что антоним "статическому" (методу) — это не "динамический" (метод)?

Начиная с версии 5.3 можете использовать позднее статическое связывание

А как это поможет? Ну тобишь имеем мы вот такое взаимодействие:
class UserController{
  public function loginAction($login, $password){
    ...
    Log::debug(...);
  }
}

Как я понимаю мне нужно использовать что то вроде:
class UserController{
  private $log;

  public function setLog($logClass){
    $this->log = $logClass;
  }
  
  public function loginAction($login, $password){
    ...
    $this->logClass::debug(...); // Не уверен, будет ли это вообще работать.
  }
}

Если да, то какой смысл от статики вообще?

А вообще, когда вы пишете код не только для себя, а для других. Когда ваше API будут использовать, то нужно думать и об удобстве использования

А что в этом не удобного:
$userTable = $sl->get('Model\User\UserTable');
$user = $userTable->find($id);
echo $user->getFullName();
Я знаком с Yii, Slim и Lumen. Тем не менее это мне не мешает заниматься Битриксом. Занимаюсь я им, потому что на него есть спрос. Зачем переходить на фреймворки, если есть Битрикс и можно на нем зарабатывать деньги?

Шаблонное поведение как раз таки у большинства тех кто писал здесь комменты, т.к. вы просто ненавидите Битрикс, и пишите переходите на Symfony, на Laravel, никто даже Yii не упомянул(((( А то что не умеете и не хотите в нем разбираться, это как то опускается, при чем большинство писавших и минусовавших вообще никогда не писали на Битрикс.

То что ты прочитал про паттерны на википедии делает тебя асом в архитектуре? Как по мне, ты знаешь только MVC и считаешь, что это круто, а все остальное это не архитектура вовсе (при чем MVVM, MVP тоже для тебя не архитектуры). Так кому стоит читать про паттерны?
UFO just landed and posted this here
Членомер начался, ну ладно: https://github.com/irpsv. В репах думаю сам найдешь.
Сайт http://actorswanted.ru весь на Yii2, но исходники закрытые (так что это недоказуемо, на слово придется поверить что его я делал).
Сейчас конечно начнешь мазаться, что типа это херня, все криво сделано и т.д. но да ладно.
P.S. я комменты пишу один раз в неделю уже наверное (спасибо всем большое), так что активной беседы не получиться.
> спасибо всем большое
По крайней мере, вы собрали адекватную статистику о том, какие чувства разработчики испытывают от работы с Битрикс.
А я оказался крайний, несправедливо(((( Кстати этот пост скоро наберет такой же рейтинг (только в минус) как статья «оригинал».
А я оказался крайний, несправедливо

Что несправедливого в том, что сообщество ответило на вашу публикацию теми инструментами, которые у него есть?

А в чём несправедливость-то? Вашу попытку по достоинству оценили, ну или по его отсутствию, если уж точнее.

Глупость называть кашу творящуюся в битриксе архитектурой, цитировать руководство и говорить что там есть MVC, которого там нет и близко.
И тем более говорить, что компонент для синхронизации с из коробки 1С годен на что-то большее, чем работать в какой-нибудь демке, в идеальных условиях.

Примерно эту мысль, сообщество и донесло всё это стандартным здесь образом. Кто-то в комментариях, а кто-то в рейтинге.

Вы немножечко уровнем ошиблись, но я думаю, что автор все равно увидит ваш комментарий.

Прошу прощения, ответ был на комментарий выше, конечно.
Как по мне, ты знаешь только MVC и считаешь, что это круто, а все остальное это не архитектура вовсе (при чем MVVM, MVP тоже для тебя не архитектуры)

Так по вашим же словам, в Битриксе MVC? Зачем в этом контексте поминать MVVM и MVP?

Зачем переходить на фреймворки, если есть Битрикс и можно на нем зарабатывать деньги?

Чтобы развиваться как разработчик, и, потенциально, зарабатывать больше денег?

UFO just landed and posted this here
UFO just landed and posted this here
просто за битрикс платят больше в Сибири, вот и кодим на нем). Хомячки покупают, значит есть спрос, а есть спрос… ну вы поняли.
Вообще, у нас заказчик пожалел о том, что выбрал Битрикс, так как каждый день «отваливается» какой-то модуль/компонент, и быстро дебажить это дело не всегда получается. Проще закрыть бизнес, и открыть заново с другим «Не-Битриксом», чем переводить весь магазин на другую платформу :)
Ничего себе, неужели бизнес настолько завязан на софте?
Если речь идет об интернет-магазине, для чего, собственно, и покупаются подобные штуки, то такой бизнес на 100% завязан на софте.
Да, проблема в том, что если заказчик (т. е. владелец бизнеса, изначально ориентированного на продажи в интернете) выбирает себе подходящую CMS для магазина, то как правило он сначала «попадается» на такие вот рекламные кампании как у Битрикса (где рассказывается как все хорошо и круто), а потом ищет программистов, которые этого монстра и будут настраивать. Очень обидно, что далеко не все предприниматели спрашивают совета у программистов, а верят пиару.

господи, битрикосиды, просто смиритесь с тем, что вы работаете с куском бесперспективного, устаревшего, плохо спроектированного говна, который покупают только люди, которые в it шарят только как двигать мышкой по экрану и им это тупо втюхали инфоцыгане, которые из ваших же рядов... Просто признайтесь себе в этом. Не надо рассказывать какой он "не плохой"... Это полное архитектурное говно с какой стороны ни посмотри. Это просто дно... Куда ни глянь - одни косяки.

Это как с алкашкой... Вам надо самим принять проблему, чтобы излечиться. XD

Дальше 5 страницы просто не стоит читать, чтобы понять, что ты вляпался и уже воняет.

Sign up to leave a comment.

Articles