Здрасте!
В русскоязычном сегменте Интернета существует такой интересный феномен, как хейтеры Битрикс.
Недавно прочитал статью Минусы Битрикса, или Битрикс глазами программиста, и плакать захотелось. Причем этот парень не одинок, он по наслышке знает, что Битрикс — это ужас ужасный.
В данном посте я напишу некое опровержение того что написал автор, потому что написал он полный бред!
Итак, по порядку:
1. Архитектура
Битрикс — это полное отсутствие архитектуры. Это просто набор десятков или сотен тысяч файлов с кусками кода, которые никак не связаны между собой.
Ну нет господа, если уж и делать обзор, то как-то надо запариваться и изучать систему. У Битрикса есть условное разделение частей системы на MVC:
- контроллер — это компонент (хотя по факту это виджет, а в некоторых случаях роутер — если говорить про компоненты из коробки)
- модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)
- представление — это шаблоны. Тут все как надо, есть темы, есть шаблоны, все океюшки
2. Код
Ниже я приведу функцию «продукта». Эта функция — метод класса (!!!) ядра (!!!) Битрикса, который вызывается, как статический (!!!) и ему передается 21 аргумент по ссылке (!!!).
У BitrixFramework есть такое явление как D7 — это новое ядро. В нем переписано много чего, да конечно оно мало задокументировано, но если говорить про сравнение, то это тоже самое что смотреть код Yii 1, и говорить что там говнокод.
Смотреть код который написан лет 7 назад и на его основе делать обзор, пфф…
Примеры кода из D7 (выгрузка названий элементов, количество которых больше 5):
ElementTable::getList(array(
'select' => array('NAME'),
'filter' => array('>CNT' => 5)
'runtime' => array(
new Entity\ExpressionField('CNT', 'COUNT(*)')
)
));
в старом ядре пришлось писать бы руками запрос.
3. Обман
если вы выбрали 1С Битрикс, чтобы его просто так взять и связать с 1С своего предприятия стандартным модулем — у вас ничего не получится.
Это можно сделать, НИЧЕГО не допиливая, а данная фраза говорит о компетенции писавшего.
Пример легко можно найти: www.youtube.com/watch?v=IF97A0RtJ34 (интеграция начинается с 20 минуты).
Все доработки — это боль, тлен и тысячи трудочасов программиста
Если делать как поступают многие Битрикс-разработчики (а они просто берут модули из коробки и их допиливают их), то да — это тот еще геморрой. Но кто мешает написать свой компонент, так как надо?
Заключение
В итоге, это можно охарактеризовать, как продукт хороших маркетологов, которые работают без хороших программистов
Вот здесь на самом деле соглашусь: очень хорошо разрекламированная система, с весьма сомнительным инструментарием для разработчика.
Статья написана программистом и описывает то, что у Битрикса под капотом.
Статья про минусы Битрикс написана сомнительным программистом, по крайней мере в области Битрикс, который прочитав пару страниц документации, написав один компонент или даже модуль (но вряд ли), считает что он все знает о системе.
Если проводить аналогию с машиной, то машина едет так, как ей управляет водитель. Поэтому все хейтеры, которые помчались дизлайкать данный пост, подумайте (если умеете): Битрикс очень популярная система, ее очень часто покупают, и люди готовы за нее платить. Так неужели не стоит с ней работать?
Комментарии (149)
Matvey-Kuk
24.04.2016 16:04+61Благодарю! Давно ожидал подробный обзор лучших сторон битрикса с примерами кода, ссылками и развернутым объяснением, почему «здесь хорошо, а здесь плохо», без перехода на личности и вообще, сразу чувствуется подход профессионала.
rpsv
24.04.2016 16:06-42Этот пост был не на это направлен, а на опровержение того, что написал человек, который откровенно в Битрикс не разбирается.
JhaoDa
24.04.2016 16:07+17Опровержение? Без примеров кода, ссылок и развернутого объяснения? Мы на Хабре, тут принято опровергать с пруфами.
Matvey-Kuk
24.04.2016 16:12+41Это же вселенная битрикс. Достаточно общих слов и обвинения в непрофессионализме. Не переживайте.
rpsv
24.04.2016 16:20-13Код скинул. А разве по вашему человек профессионал, если он пишет что в Битрис нельзя сделать интеграцию с 1С стандартными средствами, хотя по факту это можно сделать?
TimsTims
24.04.2016 23:06+4Пользователи Хабра очень просят вас выложить пример такой интеграции, чтобы вы подробно расписали(может, даже со скриншотами):
-«вот тут клик-клик нажали сюда, настроили то, хоп-хоп и готово: вот смотрите, вот тут у нас товар, вот тут он в Битриксе появился. Всё очень просто!»
Добавьте это и вас отблагодярят по хабровски. И желательно убрать наезды на автора другого поста. Лучше ничего не пишите про это, нафиг здесь такой срач.
kotomyava
25.04.2016 03:15+3А можно? Вот так стандартными средствами, без напильника для произвольной конфигурации? Так покажите как это делается, вместо такого сомнительного утверждения.
Crank
25.04.2016 12:06+3Вы произнесли запрещенные в 1С слова «произвольная конфигурация». Система выполнила недопустимую операцию, ваша лицензия аннулирована.
Crank
25.04.2016 12:04Формально обмен с 1С есть. Давайте все полюбуемся кодом компонента sale.export.1c, посмотрим как написан класс CAllSaleExport. На дворе 2016 год, такой обмен даром не нужен.
rpsv
24.04.2016 17:05-16Интересненько. Статья про минусы не особо изобилует ссылками или кодом, за исключением кода, которым уже никто не пользуется. Но там это нормально, потому что для всех Битрикс априори говно. Еще раз говорю: моя статья опровергает ровно то, что написано в статье про минусы, и не более. Но видимо всем по хер.
Delphinum
24.04.2016 23:00+11Вы пытаетесь опровергнуть устоявшееся в обществе мнение. Кто говорил что будет легко?
Focushift
24.04.2016 16:48+1Что-то мало для опровержения, 2 пункта с копейками. 3й пункт на ответ не тянет, к примеру если взять микрософт, то само с собой он интегрируется за пару щелчков, а не надо чей-то модуль переписывать.
Apatic
24.04.2016 19:14+1Благодарю! Давно ожидал подробный обзор лучших сторон битрикса с примерами кода, ссылками и развернутым объяснением, почему «здесь хорошо, а здесь плохо», без перехода на личности и вообще, сразу чувствуется подход профессионала.
Я конечно извиняюсь, но и оригинальная статья не особо развернута.
Хотелось бы чтобы не только «защита» какого-то продукта должна была быть развернутой и наполненной ссылками и примерами, но и «обвинение». Иначе это получается какая-то «презумпция виновности».
lair
24.04.2016 16:12+23У Битрикса есть условное разделение частей системы на MVC
контроллер — это компонент (хотя по факту это виджет, а в некоторых случаях роутер — если говорить про компоненты из коробки)
модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)
Вот когда "условное разделение" и "делайте, что хотите", и говорят, что архитектуры нет. Архитектура обычно все-таки предполагает весьма четкие правила.
rpsv
24.04.2016 16:23-12Битрикс позволяет следовать архитектуре, но не обязывает.
lair
24.04.2016 16:36+2… благодаря чему можно легко получить хаос вместо архитектуры. Хотя бы сам Битрикс ей следует? Строго? Униформно?
rpsv
24.04.2016 16:43-8Вообще нет))) Битрикс переписывает в основном модуль Магазина и все что с этим связанно. На остальное грубо говоря — пофиг. Но если говорить про архитектуру, то Битрикс ее поддерживает.
Унифицировано не получиться никогда, потому что компоненты пишут разные программеры, ив этом большая проблема Битрикс. Но почему сообщество программеров не может сами взять все в свои руки? Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.
Битрикс поддерживает свои компоненты, и раз вы работаете с компонентами из коробки, то терпите тот говнокод что у них есть. Если хоть немного есть скилов, пишите свои модули и компоненты и будет счастье.nazarpc
24.04.2016 16:55+4Тем более когда продукт делает несколько разработчиков у них должны так или иначе даже не желая того возникнуть правила и стандарты. А если нет — то это многое говорит о процессе разработки.
rpsv
24.04.2016 17:02-2они есть, именно соглашение по документированию кода, и по сути компоненты соответствуют ему, вот только получается все равно не круто.
MGames
24.04.2016 17:01Но почему сообщество программеров не может сами взять все в свои руки? Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.
Вероятно, потому что это коммерческий продукт.
HaruAtari
24.04.2016 18:16+5Но почему сообщество программеров не может сами взять все в свои руки? Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.
Действительно. Почему это люди не хотят своими силами писать движок за который перед этим заплатили?! Странные. Хотят за свои деньги получить готовое решение.rpsv
24.04.2016 18:45-8Еще раз: разработчики ничего не платили. В маркетплейсе много решений выложено, многие из которых бесплатные.
Delphinum
24.04.2016 23:03Я не силен в Битриксе, даже кода его не видил, но мне стало интересно: Битрикс позиционируется как CMS, фреймворк или библиотека?
Old_Chroft
25.04.2016 01:381С -Битрикс позиционируется как готовая законченная система. О том и
ср*чьразгор, против чего поднял вопрос топик-стартер.
lair
24.04.2016 23:20+6На остальное грубо говоря — пофиг.
Вот потому, что пофиг, и нет архитектуры.
Унифицировано не получиться никогда, потому что компоненты пишут разные программеры, ив этом большая проблема Битрикс.
… но вы все еще утверждаете, что с архитектурой все хорошо? Когда с архитектурой хорошо, система просто не позволяет выходить за пределы унификации (по крайней мере, без существенных усилий).
Но почему сообщество программеров не может сами взять все в свои руки?
Может. Но это уже не будет архитектурой битрикса.
Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.
Ну да, когда я беру продукт (кажется, еще и не бесплатный), у меня есть к нему вполне конкретные требования.
Битрикс поддерживает свои компоненты, и раз вы работаете с компонентами из коробки, то терпите тот говнокод что у них есть.
Ага, все-таки в компонентах из коробки — говнокод? Ну и зачем вы тогда спорите с тем фактом, что у Битрикса плохая архитектура?
VampiRUS
24.04.2016 16:12+5Вот отсутствие документации по новому ядру очень огорчает, особенно когда обновление ломает старое работающее, при чём и новое api не стоит на месте, а развивается, читай ломает, то что удалось починить, через найденые возможности в новом api.
rpsv
24.04.2016 16:21-7И без документации можно изучить структуру классов, с начальным знанием английского языка (установите IDE в каждой из них есть всплывающие подсказки, и карта классов). Конечно не самые шикарное решение, но все таки решение.
northicewind
24.04.2016 16:45+3Это совсем не решение. Вот аргумент метода getList
array( 'select' => array('NAME'), 'filter' => array('>CNT' => 5) 'runtime' => array( new Entity\ExpressionField('CNT', 'COUNT(*)') ) )
Что из этого подскажет IDE?rpsv
24.04.2016 16:47-12IDE подскажет класс, а зайти в класс потратить пару минут на изучение — это уже скилл программиста.
К слову: данный класс расписан в документации.
Вообще, основные моменты все таки расписаны в документации.vladqa
25.04.2016 00:52+6IDE подскажет класс, а зайти в класс потратить пару минут на изучение — это уже скилл программиста.
по-моему, скилл программиста (в данном случае, разработчика D7), заключается, в частности, в том, чтоб догадаться о том, что параметр метода в виде магического массива, для понимания структуры которого надо лезть на сайт с документацией или смотреть исходники метода (а зачастую еще пару методов в глубину надо будет проглядеть) — это не то, что хочет пользователь фреймворка.
А догадаться в этом месте сделать нормальный самодокументрируемый fluent-интерфейс для установки всех параметров — вот это уже больше похоже на скилл программиста
VampiRUS
25.04.2016 01:05я же написал «то что удалось починить, через найденые возможности в новом api.»
Да, можно разобраться, именно это и приходится делать( а это время/деньги), чтобы перестали сыпаться на почту письма, от покупателей, которые обновили битрикс и у них в лучшем случаем модуль перестал работать.
Можно даже найти нужную замену, уточнить в тех. поддержке, получить ответ: «Да это новое API можно использовать, оно на долго» и через месяц они уже опять меняют его.
DrPass
24.04.2016 16:27+24> В русскоязычном сегменте Интернета существует такой интересный феномен, как хейтеры Битрикс.
Это как раз не феномен. Вот если бы найти человека, который положительно относится к Битриксу, и при этом занимается его поддержкой, а не продажами, вот это будет феномен :)
Spiritschaser
24.04.2016 17:41+3> Но кто мешает написать свой компонент, так как надо?
Собственно, это 80% кейсов нестандартной конфигурации Битрикс. Легче взять не-Битрикс с кучей разъяснений на Stack Overflow.
hMartin
24.04.2016 17:43+7Статья на которую вы ссылаетесь, на мой взгляд, получила неоправдано высокий рейтинг. Но ваш ответ — скорее уровень комментария к той статье, а не отдельного хабратопика.
оффтопНда, ~100 рейтинга за пост формата
Вступление: плохо плохо плохо
1. плохо
2. плохо + кусочек кода
3. плохо
вывод — плохо
Это жесть.rpsv
24.04.2016 17:48Вы правы, но комментарий бы затерялся где нибудь в дали, так что решил пожертвовать свою карму, на это неблагодарное дело. Причем мне кажется, что множество дизлайков я получить от Битриксоидов с позицией «Да на хер что-то делать, есть готовые модули, будем их править».
А вообще рейтинг у статьи на которую я ссылаюсь высокий, только потому что статья «указывает» на минусы Битрикс, и у всех (кто даже не работал с ним) сложилось негативное впечатление о системе.rahem
25.04.2016 10:06Негативное впечатление происходит от очень плохого соотношения цена/качество у Битрикс.
И еще. Вот Вы пишите многие покупают, а не задумывались кто? Чаще (конечно это мое жуткое ИМХО) его покупают далекие от понимания IT-технологий люди (решение принимается руководством). Когда решение принимает IT-спец, то выбор Битрикс как-то маловероятен.
Я сам покрутил демку Битрикса, чтобы обсудить выбор системы для внутреннего сайта и после ознакомления с «ошеломляющими» возможностями стал «любить» его еще сильнее.navion
25.04.2016 12:38Нам его навязала веб-студия и позднее стало понятно почему — Битрикс обеспечивает постоянный доход для них.
Сайт с ним нельзя сделать один раз и забыть до ребрендинга, надо постоянно ставить обновления и проверять/доводить после этого.rahem
25.04.2016 12:41+1Честности ради добавлю что сайты на бесплатных CMS тоже надо регулярно обновлять, но никто не требует при этом платить.
L0NGMAN
24.04.2016 17:44Вот тут всё сказано: http://govnokod.ru/search?search=Bitrix :)
rpsv
24.04.2016 17:50-2А кто писал это говно? Можно решить данную задачу иначе, с помощью Битрикса, но никто не заморачивается, потому что Битрикс для всех по-умолчанию не очень. Можно с таким же успехом написать говнокод на Yii, а потом говорить что фреймворк не очень!
Zezst
24.04.2016 23:48На Yii тоже можно написать говнокод, я видел такое, я с ним работал. Он мне по наследству достался. Но совсем сильно нагадить не выйдет, архитектура не позволит.
kotomyava
25.04.2016 03:31Безусловно можно. Вот только, в большинстве фреймворков, хотя бы код самого фреймворка достаточно приличен. Чего в случае Битрикса и близко не наблюдается, ни в ядре, ни в стандартных компонентах.
MetaDone
24.04.2016 17:48+14Раз уж автор упомянул про код и привел один участок, то приведу то, что в стандартном шаблоне битрикса после установки
<? 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",
rpsv
24.04.2016 17:53-10А нормальность чем определяется?
Про коробку написано в статье. Про пример D7: ниже написано, что на старом ядре это не решить, читайте полностью, а не поверхностно.
Ради лайков коммент писали что ли? Извините, я уже не могу ничего лайкать, написал статью на свою голову)))MetaDone
24.04.2016 18:08нормальность определяется нормальной документацией, следованием стандартам (если не в курсе, есть к примеру psr-2).
В битриксе же тонны ужаса тянутся с момента его появленияиз глубин адана свет для обратной совместимости, и лучше это никогда не станет, рано или поздно придет время выбирать — или поддерживать все, что написали ранее, или переписать все по человечески.
Но пока работают маркетологи, люди будут это хавать и даже защищать, а в сторону других вещей даже смотреть не будут. Меня один знакомый просил поправить мелочь в магазине на OpenCart, потому что его знакомый-битриксойд не смог разобраться даже в этом. Зато спец с опытом, в веб-разработке весьма долго.
maxtm
24.04.2016 17:55+5модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)
Модель это таки модель в общепринятом понятии MVC или таки API (а-ля ServiceLayer)?
«Писать как хотите» — никак не тянет на архитектуру.rpsv
24.04.2016 17:56-1А что такое модель в общепринятом понимаю MVC, ActivRecord??? Модель — это бизнес-логика, паттерны которые я перечислил, это способы реализации модели.
maxtm
24.04.2016 18:24Бизнес-логика это ServiceLayer, который оперирует моделями в том числе.
А модель — это часть системы которая отвечает за работу с данными конкретного объекта/сущности/етц.
Где-то это AR, где-то Manager/Entity.
Но никак ServiceLayer.
У Вас же получается, что модель — это все разом, и AR, и Manager/Entity подход ServiceLayer, что и вызывает батхерт.rpsv
24.04.2016 18:50А я не говорил что модель это ServiceLayer, и модель это уж точно не AR и DM.
Модель, т.е. бизнес-логика (почему вы модель от БЛ отделили?) — это по сути объект, который уже обращается к SL, AR, DM,…lnroma
25.04.2016 13:18Бизнес логика по сути отдельная сущность, к примеру есть библиотека расчёта цен, есть модель которая получает данные о цене, есть контролер и наконец вивер, но это не важно, бизнес логика лежит в какой то библиотеке отдельно, позволяя менять архитектуру приложения (по сути клиента) как вам хочеться, но при этом не боясь потере важного функционала(расчёт цен, налогов, таксы других финансовых операций).
vladqa
25.04.2016 00:56Справедливости ради надо отметить, что это весьма холиварная тема: ADM против RDM. Есть несколько трактований понятия «Модель» и пара лагерей, которые кидают друг в друга какашками.
Но в общем случае модель — это не только данные, но и методы по их обработке. А вот где они находятся — в сервисах или в других классах — вопрос десятый.
kroketmonster
24.04.2016 18:47+18Спасибо за статью, очень понравилось, теперь точно никогда не буду использовать битрикс и всех буду отговаривать.
remotemethod
24.04.2016 18:48+2В этой статье как и в обозреваемой, ничего конкретного, будто не статья а «прения».
offtopЧто-то мне подсказывает что следующую статью назовут:
Обзор «Обзор обзора».
kireevco
24.04.2016 20:08По поводу данной и оригинальной статьи промолчу, все было сказано уже.
Мне вот интересно, а какие альтернативы битриксу народ использует в реалиях связки с 1С? Magento?votyra
25.04.2016 07:17А для каких целей Вам нужна альтернатива? Синхронизировать цены-товары — раз вдень (импорт-экспорт xml)? или заказы? Bitrix — работает из коробки(почти) и согласно описанию(почти), но если вам нужно чуть больше «фишечек» то эта статья и предыдущие, а точнее коментарии к ним, скорей всего разубедят Вас использовать Bitrix, и Вам «прийдеться» использовать свою маженту-престу и.т.д. Да будет сложно заставить найти общий язык администраторасайта-phpпрограмиста с 1с-програмистом.
lithium_li
24.04.2016 21:11+1модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)
ActiveRecord в битриксе, где?! на дворе 2016 год, а модели битрикса методом getList до сих пор возвращают объект Main\DB\Result вместо массива из экземпляров класса модели, это не модели а плевок в лицо сообществу разработчиков.
bitrix не заводится на php7, и вряд ли заведется с огромным количество мусора в коде ядра, что уже говорит многом.
интернет-магазин веников с 5-ю наименованиями на битриксе — да пожалуйста, но делать на нем серьезные проекты это трудочасы в никуда — все равно в итоге переделывать придется на что-то другое.Spunreal
24.04.2016 21:31Эльдорадо на Битриксе. Это им не мешает быть серьёзным проектом.
С php7 сейчас как раз ведутся работы. Скоро и на нем будет запускаться. пока парочка модулей из всех не работает, скрытые ошибки не смотрел.lithium_li
24.04.2016 21:39откуда вам знать что они не перетащили весь основной функционал на другой фреймворк/апи и от битрикса не осталась только авторизация и система рендера шаблонов?
оно заметно что ведутся, обновления ломает напрочь тебе сайт и не дает откатиться обратно
michael_vostrikov
25.04.2016 06:57Слышал, что они вроде как собираются переписать с Битрикса. Не знаю, правда или нет.
asd111
25.04.2016 20:46Эльдорадо НЕ на Битриксе, а на Java платформе для инет коммерции Hybris. Они ушли от Битрикса.
Вот доказательство
hh.ru/vacancy/10488581?customDomain=1horses
25.04.2016 23:18-4Они ушли от битрикса, вы уверены? Уже ушли?
Вы уверены? А открыть исходный код их главной страницы попробуйте: http://www.eldorado.ru/
И посчитайте сколько там раз встречается слово bitrix. Я 9 раз насчитал. Это при том, что они статику с отдельного домена отдают.
Там еще масса следов, показывающих, что это битрикс.
Может быть они и собираются уйти, но сейчас у них отдача контента битриксом идет.
Spunreal
26.04.2016 11:22Пока ещё на Битриксе вроде (http://dl1.joxi.net/drive/2016/04/25/0001/2235/80059/59/76bf316f43.jpg).
Ну и одни ушли, другие пришли. Примеров крупных магазинов много:
www.oldi.ru
euroset.ru
www.svyaznoy.ru
www.shop.mts.ru
www.incity.ru
allsoft.ru
ainu
27.04.2016 10:27+1Spunreal
27.04.2016 10:57Ок, я вас понял. Посещаемость в 500к-1кк в сутки для интернет-магазина, это не серьёзный проект. Серьёзность определяется временем загрузки страницы. Справедливости ради, если б у меня был такой магазин, мне бы хватило денег на собственное решение, а не на Битриксе или любом другом фреймворке.
zenn
24.04.2016 21:55+8Я еще такого не видел, чтобы кто-то серьезно отстаивал чужое д*рьмо да еще и так уверенно. Давайте взглянем хотя бы сюда:
Примеры кода из 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 моделей и вы поймете, насколько вы заблуждались с адекватностью битрикса и его нового ядра.horses
25.04.2016 15:55-1Автор статьи просто не опытен и не в курсе, что getList в D7 — это просто обертка, которая реализует привычный синтаксис.
На самом деле там лежит объект Query. Все примерно так, как вы привели в своих ссылках.
Вот его описание в документации: http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=5751zenn
25.04.2016 23:11+2Вы так и не поняли смысла моего сообщения. То, что приведено по вашей ссылке не меньший ад чем код автора в этой статье. Еще раз, обратите внимание на выражения инкаспуляция и полиморфизм. Если не понятно — обратите внимание на динамическую модель у тех примеров, что привел я, и на то, что вы показываете в битриксе (дикий адовый п**дец с передачей массивов с неизвестными параметрами и значениями) — про такой код чаще всего говорят: «Когда я начинал писать этот код только бог и я знали как он работает. Теперь остался только бог».
horses
25.04.2016 23:28-1Вы ссылку открывали: 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
Кстати, почему вы говорите о неизвестных параметрах? Набор параметров строго определен и вольностей здесь нет.
Так же в ваших эмоциональных выражениях кроме эмоций нет ничего. Объясните чем это плохо и какие проблемы создает?
xRay
24.04.2016 22:30А что скажите про такой баг http://dev.1c-bitrix.ru/community/forums/messages/forum6/topic73598/message384042/#message384042?
Ладно бы его уже его исправили, но нет. Скоро уже год будет этому багу…
Jodes
24.04.2016 23:39+8Хорошая попытка, Битрикс, но нет.
Автор выбрал элегантный способ хабрасуицида :)
vladqa
25.04.2016 00:46+1но если говорить про сравнение, то это тоже самое что смотреть код 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, гораздо лучше.
Old_Chroft
25.04.2016 02:18+2ЖЫРНЫМ выделено мной:
контроллер — это компонент (хотя по факту это виджет, а в некоторых случаях роутер — если говорить про компоненты из коробки)
Контоллер, виджет, роутер!? Вы разницу понимаете?модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)
Не, API — это нечто другое. Модель — это модель. А Application Programming Interface — совершенно другое. Я категорически против, что бы с моей моделью делали что хотели. Бл*ть, инкапсуляция — это один из основополагающих принципов ООП!
представление — это шаблоны. Тут все как надо, есть темы, есть шаблоны, все океюшки
Да, тут все как надо. С условием, что это «как надо» нельзя будет редактировать из админки (если кто не в курсе — в Битриксе можно редактировать код приложения из админки. Но это я так понимаю и есть одна из «фишек» ).
PS: Я не хейтер Битрикса. С этой системой я работал недостаточно для широко развернутого поста (в ту или иную сторону). Высказал только свое IMHO.
PPS: Битрикс, перепишите к черту свою систему заново, в ней нет ничего такого за что стоит цепляться и взращивать монстра.
IvanGur
25.04.2016 07:21Bitrix, продукт сам в себе, недаром существует BitrixVM.
Но меня всегда смущало, почему php_admin_value open_basedir «none»?kotomyava
25.04.2016 15:15+1А меня, вот, куда больше смущает, что битрикс создаёт тонны php файлов, от пользователя, под которым запущен веб сервер.
И после этого, становится понятно, почему в CMS приходится встраивать антивирус…
mcvlad
25.04.2016 07:21А что побудило разработчиков именовать, к примеру, атрибуты таблиц БД заглавными буквами?
IgorAdamenko
26.04.2016 16:38Про именование даже не говорите. То, что у них там всё ОРЁТ НА ТЕБЯ, это ещё что. Там в коде есть
$arResult
,$res
,$ar_res
— и всё это могут быть переменные для одного и того же, но в разных компонентах/модулях. Кто во что горазд.
lizarge
25.04.2016 07:21+1Два года работал на проектах основанных на битрикс, были проекты с интернет магазинами со стандартной и кастомной синхронизацией с 1С, и другими е-коммерц системами. Ничего хорошего в защиту этой поделки сказать не могу.
Неудобная архитектура (? cкорее даже фреймворк), постоянные сбои с выгрузками со стороны 1C, проблемы со встроенными инструментами (визуальный ректор) огромные размеры дистрибьютивов, и просто фантастические требования к серверу — чем не хейтерство?
Хотя да, если вы хотите очень быстро открыть простой интернет магазин взяв за основу нормальную базу 1С и шаблонный дизайн, то это правильный выбор. Правда при всех выше указаных вещах скорее всего вам не нужен интернет магазин.
Все выше сказаное имхо, и на состояние 2 года назад.
Alexeyslav
25.04.2016 08:43+1Платят за систему не те люди которым потом работать с ней, ну а раз заплатили то приходится вертеться чтобы работало, а снаружи-то не видно каких усилий это стоило и на какие костыли пришлось пойти чтобы «через неделю уже должно работать!».
eshimischi
25.04.2016 10:07Тоже пример из жизни: год работал в студии, которая делала сайты на битрикс, причем сайты достаточно серьезных клиентов. Поступив на «службу», был обязан пройти тестирование и сертификацию на сайте 1c.bitrix.ru и овладеть всеми навыками работы. Прошел, получил. Каждый новый проект вызывал рвотные позывы и все убеждения моего шефа, что весь код должен быть реализован только на API Bitrix приводили к часовым спорам и в итоге я брал и писал весь функционал на голом php, с добавлением ООП и фронтенд на jquery и др. Остались даже некоторые сделанные мной компоненты — корзина интернет магазина, система вывода информации по избирательным участкам и новостной агрегатор. Сравнительно недавно вернулся к одному проекту на битриксе и потратил уйму времени, чтобы вспомнить основы работы с API и доделать какие то штуки. Единственное, что мне нравилось в нем — это визуальный редактор, выбираем нужный блок и редактируем его свойства, практически без необходимости лезть в код.
horses
25.04.2016 16:03+1Извините, но может быть вам стоило уволиться, чем себя так мучится?
Это на любой системе, хоть битрикс, хоть джомла, хоть друпал и любая другая, не правильно брать и нарушая все правила писать на голом php, делать прямые запросы и реализовывать свой код внутри системы.
А потом придет другой разработчик, и будет ругаться, что это за битрикс такой плохой, что тут ничего не понять?eshimischi
25.04.2016 16:22+1Дак я и уволился. Основной API естественно писался на кодобазе битрикса, но все вокруг делалось на голом php — это сберегло мне время и нервы.
horses
25.04.2016 23:32-1На голом php не может быть быстрее по определению (но есть нюансы). Вы просто не знали как нужно это правильно делать. Я уверен на 99%, что именно так дело и обстояло.
Так же не совсем понятно, что значит «голый php»? Вы вместо написания компонентов, прямо php код на публичных страницах размещали, делали прямые запросы к бд (возможно к таблицам инфоблоков запросы?)?
Приведите пару примеров того, что вы делали на голом php и как вы это все реализовали.eshimischi
26.04.2016 09:15Код компонентов сейчас не под рукой, но в любом случае вся структура кода самих компонентов реализована на API битрикса. Точно помню, что когда была поставлена задача реализовать простую корзину заказов товаров (без оплаты и прочих наваротов) — добавление товаров и последующая передача этого списка на почтовый адрес магазина с указанием реквизитов заказчика, то вывод товаров сделан с применением (дай Бог памяти) news.list (вывод данных инфоблока товаров), а сам функционал корзины сделан отдельным классом php, с передачей и хранением параметров в localstorage (jquery). Никаких прямых запросов к БД.
horses
26.04.2016 10:13Это была версия с магазином? Т. е. вы реализовали корзину в обход штатных средств? А как же оформление заказа? Ведь оно не будет брать товары из вашей корзины.
И почему localstorage? Для авторизованного пользователя так же? Т. е. если я добавил товары в корзины с одного компьютера, а захотел оформить заказ с другого: у меня это не получиться?
И к слову, корзина обычно не занимается оплатой и прочими вещами. Она хранить добавленные туда товары. А оформление заказа уже оформляется отдельный компонент. По факту это и отдельный шаг, ведь в магазине может и не быть корзины и она может пропускаться.
Но я допускаю вариант того, что у вас идет просто игра слов. Вы используете всю структуру битрикса, его API, а там где функционал битрикса не покрывается задачи заказчика, то все разработчики пишут на «голом PHP». Создают свои компоненты или модули и реализуют там свой код.
Например, в вашем случае может быть так, что вы реализовали на младшей редакции, без интернет магазина некоторую упрощенную корзину, которая в простом варианте позволяет вам оформлять заказы (если эти две вещи совместить). Но здесь нет ничего сверхъестественного: так делают большинство разработчиков на битриксе.eshimischi
26.04.2016 10:27Версия действительно была по-моему standart. Повторюсь, не стояла задача делать оформление заказа — простой список с ячейкой количества позиции, кнопка добавить, все это открывается в лайтбоксе с формой ввода контактной информации и кнопкой «Отправить». Про корзину и оплату — это естественно, просто объединил это в 1 единицу в данном случае (процессинг и оформление заказа в идеальном и цельном варианте).
juventino40
25.04.2016 10:28За свою многолетнию практику пришлось использовать битрикс 1 раз — это был госзаказ, и заказчик прямо сказал, что «нужно просто распилить деньги за дорогой продукт, а результат не важен».
Lopar
25.04.2016 13:57+2«Недавно прочитал обзор того парня и мне есть что сказать». Мы превращаемся в филиал задолба! ли… ;(
pistol
25.04.2016 18:39+1Чувак, ты просто копия всех тех битриксоидов, которые еще не открыли для себя Симфони. Вы ведете себя шаблонно, отстаивая Битрикс, но все равно в скором времени переходите на фреймворки. Обратного пути не существует.
То, что ты называешь архитектурой, не является таковой. Это просто использование синтаксиса языка — вызов статических методов и т.д. Советую почитать про паттерны проектирования, чтобы понять, что такое архитектура.horses
25.04.2016 23:34-2А что вы имеете против против статических методов? Везде только динамика, по вашему?
Delphinum
25.04.2016 23:56А как вы их предложите тестировать?
horses
26.04.2016 10:04Начиная с версии 5.3 можете использовать позднее статическое связывание.
А вообще, когда вы пишете код не только для себя, а для других. Когда ваше API будут использовать, то нужно думать и об удобстве использования. Писать десятки строк кода, для того чтобы просто узнать есть ли элемент в таблице с таким ID — это избыточно.
При этом ваши статические методы могут быть обертками над кодом, выстроенным динамически.lair
26.04.2016 10:11+2Когда ваше API будут использовать, то нужно думать и об удобстве использ2ования.
И что, работа с экземплярами как-то мешает удобству использования?
При этом ваши статические методы могут быть обертками над кодом, выстроенным динамически.
Эм, а вы не в курсе, что антоним "статическому" (методу) — это не "динамический" (метод)?
Delphinum
26.04.2016 15:14Начиная с версии 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();
rpsv
26.04.2016 07:13-2Я знаком с Yii, Slim и Lumen. Тем не менее это мне не мешает заниматься Битриксом. Занимаюсь я им, потому что на него есть спрос. Зачем переходить на фреймворки, если есть Битрикс и можно на нем зарабатывать деньги?
Шаблонное поведение как раз таки у большинства тех кто писал здесь комменты, т.к. вы просто ненавидите Битрикс, и пишите переходите на Symfony, на Laravel, никто даже Yii не упомянул(((( А то что не умеете и не хотите в нем разбираться, это как то опускается, при чем большинство писавших и минусовавших вообще никогда не писали на Битрикс.
То что ты прочитал про паттерны на википедии делает тебя асом в архитектуре? Как по мне, ты знаешь только MVC и считаешь, что это круто, а все остальное это не архитектура вовсе (при чем MVVM, MVP тоже для тебя не архитектуры). Так кому стоит читать про паттерны?pistol
26.04.2016 07:30+1Я знаком с Yii, Slim и Lumen
Если скинешь линк хоть на один свой модуль какого-то фреймворка на Гитхабе, я верну все слова о Битриксе назад. И вообще, признаю, что я неправильно понимаю этот мир, все устроено иначе.rpsv
26.04.2016 10:50Членомер начался, ну ладно: https://github.com/irpsv. В репах думаю сам найдешь.
Сайт http://actorswanted.ru весь на Yii2, но исходники закрытые (так что это недоказуемо, на слово придется поверить что его я делал).
Сейчас конечно начнешь мазаться, что типа это херня, все криво сделано и т.д. но да ладно.
P.S. я комменты пишу один раз в неделю уже наверное (спасибо всем большое), так что активной беседы не получиться.DrPass
27.04.2016 10:00> спасибо всем большое
По крайней мере, вы собрали адекватную статистику о том, какие чувства разработчики испытывают от работы с Битрикс.rpsv
27.04.2016 12:48-1А я оказался крайний, несправедливо(((( Кстати этот пост скоро наберет такой же рейтинг (только в минус) как статья «оригинал».
lair
27.04.2016 13:18А я оказался крайний, несправедливо
Что несправедливого в том, что сообщество ответило на вашу публикацию теми инструментами, которые у него есть?
kotomyava
27.04.2016 21:06+1А в чём несправедливость-то? Вашу попытку по достоинству оценили, ну или по его отсутствию, если уж точнее.
Глупость называть кашу творящуюся в битриксе архитектурой, цитировать руководство и говорить что там есть MVC, которого там нет и близко.
И тем более говорить, что компонент для синхронизации с из коробки 1С годен на что-то большее, чем работать в какой-нибудь демке, в идеальных условиях.
Примерно эту мысль, сообщество и донесло всё это стандартным здесь образом. Кто-то в комментариях, а кто-то в рейтинге.
lair
26.04.2016 09:57+1Как по мне, ты знаешь только MVC и считаешь, что это круто, а все остальное это не архитектура вовсе (при чем MVVM, MVP тоже для тебя не архитектуры)
Так по вашим же словам, в Битриксе MVC? Зачем в этом контексте поминать MVVM и MVP?
lair
26.04.2016 13:56+1Зачем переходить на фреймворки, если есть Битрикс и можно на нем зарабатывать деньги?
Чтобы развиваться как разработчик, и, потенциально, зарабатывать больше денег?
IgorAdamenko
26.04.2016 16:36Вот это вот ключевая проблема, которую не понимают те, кто разрабатывают под Битрикс. Идеология «зачем мне что-то иное если и здесь платят» делает из программиста обезьяну, которая штампует одинаковые решения для клиента. Программирование под Битрикс — это серьёзный такой вендор-лок. И если вовремя не уйти, то дальше путь, видимо, только в программисты под 1С? Страшно это.
IgorAdamenko
26.04.2016 16:33+6К сожалению, не могу минусануть ни пост, ни карму. Пост за его откровенное издевательство над Хабром, карму — за то, что позволили себе такое.
Статья про минусы Битрикс написана сомнительным программистом, по крайней мере в области Битрикс, который прочитав пару страниц документации, написав один компонент или даже модуль (но вряд ли), считает что он все знает о системе.
Разрабатывал, поддерживал и вообще работал с Битриксом на протяжении трёх лет. Писал для МК, писал компоненты, шаблоны, вот это вот всё. Пару недель назад этот ад закончился. Попробуйте и вы, вам понравится. Может я и не прав, но я не знаю, насколько глубоко нужно зарыться в Битрикс, чтобы найти там что-то не кривое?
По факту: 1С-Битрикс — это компания, которой плевать на разработчиков, потому что она понимает, что не они будут решать, покупать Битрикс или нет. Решать будет заказчик, который, увидя возможности визуального редактирования, зальёт всё кипятком и побежит отдавать свои деревянные. Этим же объясняется отсутствие сколько-либо нормальной документации. По большинству реально полезных фич, которые в находятся на шаг дальше
CIBlockElement::GetList
её нет и находить её приходится в комментариях на форуме, например. А если говорить про что-то новое, D7, API B24, то тут легче умолить клиента потерпеть ещё пару лет, или наколхозить что-нибудь своё, вокруг всего этого.
P. S.: А то, что вы называете сомнительными программистами всех, кто не любит Битрикс, учитывая их количество, должно как минимум наводить вас на мысль о своей компетентности в программировании. А вы, похоже, просто считаете себя Д'Артаньяном.
Frimko
26.04.2016 21:05просто за битрикс платят больше в Сибири, вот и кодим на нем). Хомячки покупают, значит есть спрос, а есть спрос… ну вы поняли.
mcvlad
28.04.2016 16:24Вообще, у нас заказчик пожалел о том, что выбрал Битрикс, так как каждый день «отваливается» какой-то модуль/компонент, и быстро дебажить это дело не всегда получается. Проще закрыть бизнес, и открыть заново с другим «Не-Битриксом», чем переводить весь магазин на другую платформу :)
Zhandos
28.04.2016 19:05Ничего себе, неужели бизнес настолько завязан на софте?
DrPass
29.04.2016 01:53Если речь идет об интернет-магазине, для чего, собственно, и покупаются подобные штуки, то такой бизнес на 100% завязан на софте.
mcvlad
29.04.2016 14:00Да, проблема в том, что если заказчик (т. е. владелец бизнеса, изначально ориентированного на продажи в интернете) выбирает себе подходящую CMS для магазина, то как правило он сначала «попадается» на такие вот рекламные кампании как у Битрикса (где рассказывается как все хорошо и круто), а потом ищет программистов, которые этого монстра и будут настраивать. Очень обидно, что далеко не все предприниматели спрашивают совета у программистов, а верят пиару.
JhaoDa
Хммм, мне одному видится здесь противоречие?
rpsv
Не совсем. Я написал что можно работать с системой, хоть и не очень удобно. Статья же была для обывателя (как и собственно статья про минусы).
serginhold
>> Не могли бы вы показать пару примеров из этого ядра? Глобальные переменные уже перестали использовать или ещё нет?
вот сравнение есть на просторах интернета
www.intervolga.ru/blog/bitrix/d7-analogi-lyubimykh-funktsiy-v-1s-bitriks
В общем стремятся не использовать глобальные переменные, но они все равно остались по всюду )
Я вот не понимаю, почему в битриксе никак не избавятся от global $APPLICATION и global $USER, две самые «популярные» переменные, а по новому с ними работать нельзя
horses
Потому что вынуждены поддерживать обратную совместимость. Новый код их не использует, но старый то никуда не делся:
Как в коде ядра, который еще не переписали, так и в решениях разработчиков.
serginhold
Какой новый код их не использует?
Я про это например:
$APPLICATION->IncludeComponent()
или про это:
$USER->IsAdmin()
есть же теперь класс
Bitrix\Main\Application
почему там нет метода IncludeComponent?
horses
Потому что еще этот код не реализован. Задача же стоит не просто формально уйти от глобальных переменных и типа ООП теперь во весь рост.
Вполне возможно, что есть нужда вообще полностью пересмотреть работу $APPLICATION->IncludeComponent(). Не большой массив параметров передавать. Полноценная поддержка ООП компонентов, где наследоваться может не только код компонента, но и шаблоны, описания и параметры.