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(). Не большой массив параметров передавать. Полноценная поддержка ООП компонентов, где наследоваться может не только код компонента, но и шаблоны, описания и параметры.
-«вот тут клик-клик нажали сюда, настроили то, хоп-хоп и готово: вот смотрите, вот тут у нас товар, вот тут он в Битриксе появился. Всё очень просто!»
Добавьте это и вас отблагодярят по хабровски. И желательно убрать наезды на автора другого поста. Лучше ничего не пишите про это, нафиг здесь такой срач.
Благодарю! Давно ожидал подробный обзор лучших сторон битрикса с примерами кода, ссылками и развернутым объяснением, почему «здесь хорошо, а здесь плохо», без перехода на личности и вообще, сразу чувствуется подход профессионала.
Я конечно извиняюсь, но и оригинальная статья не особо развернута.
Хотелось бы чтобы не только «защита» какого-то продукта должна была быть развернутой и наполненной ссылками и примерами, но и «обвинение». Иначе это получается какая-то «презумпция виновности».
У Битрикса есть условное разделение частей системы на MVC
контроллер — это компонент (хотя по факту это виджет, а в некоторых случаях роутер — если говорить про компоненты из коробки)
модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)
Вот когда "условное разделение" и "делайте, что хотите", и говорят, что архитектуры нет. Архитектура обычно все-таки предполагает весьма четкие правила.
… благодаря чему можно легко получить хаос вместо архитектуры. Хотя бы сам Битрикс ей следует? Строго? Униформно?
Унифицировано не получиться никогда, потому что компоненты пишут разные программеры, ив этом большая проблема Битрикс. Но почему сообщество программеров не может сами взять все в свои руки? Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.
Битрикс поддерживает свои компоненты, и раз вы работаете с компонентами из коробки, то терпите тот говнокод что у них есть. Если хоть немного есть скилов, пишите свои модули и компоненты и будет счастье.
Тем более когда продукт делает несколько разработчиков у них должны так или иначе даже не желая того возникнуть правила и стандарты. А если нет — то это многое говорит о процессе разработки.
Вероятно, потому что это коммерческий продукт.
Но почему сообщество программеров не может сами взять все в свои руки? Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.
Действительно. Почему это люди не хотят своими силами писать движок за который перед этим заплатили?! Странные. Хотят за свои деньги получить готовое решение.
На остальное грубо говоря — пофиг.
Вот потому, что пофиг, и нет архитектуры.
Унифицировано не получиться никогда, потому что компоненты пишут разные программеры, ив этом большая проблема Битрикс.
… но вы все еще утверждаете, что с архитектурой все хорошо? Когда с архитектурой хорошо, система просто не позволяет выходить за пределы унификации (по крайней мере, без существенных усилий).
Но почему сообщество программеров не может сами взять все в свои руки?
Может. Но это уже не будет архитектурой битрикса.
Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.
Ну да, когда я беру продукт (кажется, еще и не бесплатный), у меня есть к нему вполне конкретные требования.
Битрикс поддерживает свои компоненты, и раз вы работаете с компонентами из коробки, то терпите тот говнокод что у них есть.
Ага, все-таки в компонентах из коробки — говнокод? Ну и зачем вы тогда спорите с тем фактом, что у Битрикса плохая архитектура?
array(
'select' => array('NAME'),
'filter' => array('>CNT' => 5)
'runtime' => array(
new Entity\ExpressionField('CNT', 'COUNT(*)')
)
)
Что из этого подскажет IDE?
К слову: данный класс расписан в документации.
Вообще, основные моменты все таки расписаны в документации.
IDE подскажет класс, а зайти в класс потратить пару минут на изучение — это уже скилл программиста.
по-моему, скилл программиста (в данном случае, разработчика D7), заключается, в частности, в том, чтоб догадаться о том, что параметр метода в виде магического массива, для понимания структуры которого надо лезть на сайт с документацией или смотреть исходники метода (а зачастую еще пару методов в глубину надо будет проглядеть) — это не то, что хочет пользователь фреймворка.
А догадаться в этом месте сделать нормальный самодокументрируемый fluent-интерфейс для установки всех параметров — вот это уже больше похоже на скилл программиста
Да, можно разобраться, именно это и приходится делать( а это время/деньги), чтобы перестали сыпаться на почту письма, от покупателей, которые обновили битрикс и у них в лучшем случаем модуль перестал работать.
Можно даже найти нужную замену, уточнить в тех. поддержке, получить ответ: «Да это новое API можно использовать, оно на долго» и через месяц они уже опять меняют его.
Это как раз не феномен. Вот если бы найти человека, который положительно относится к Битриксу, и при этом занимается его поддержкой, а не продажами, вот это будет феномен :)
Собственно, это 80% кейсов нестандартной конфигурации Битрикс. Легче взять не-Битрикс с кучей разъяснений на Stack Overflow.
Вступление: плохо плохо плохо
1. плохо
2. плохо + кусочек кода
3. плохо
вывод — плохо
Это жесть.
А вообще рейтинг у статьи на которую я ссылаюсь высокий, только потому что статья «указывает» на минусы Битрикс, и у всех (кто даже не работал с ним) сложилось негативное впечатление о системе.
<?
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: ниже написано, что на старом ядре это не решить, читайте полностью, а не поверхностно.
Ради лайков коммент писали что ли? Извините, я уже не могу ничего лайкать, написал статью на свою голову)))
В битриксе же тонны ужаса тянутся с момента его появления
Но пока работают маркетологи, люди будут это хавать и даже защищать, а в сторону других вещей даже смотреть не будут. Меня один знакомый просил поправить мелочь в магазине на OpenCart, потому что его знакомый-битриксойд не смог разобраться даже в этом. Зато спец с опытом, в веб-разработке весьма долго.
Модель это таки модель в общепринятом понятии MVC или таки API (а-ля ServiceLayer)?
«Писать как хотите» — никак не тянет на архитектуру.
А модель — это часть системы которая отвечает за работу с данными конкретного объекта/сущности/етц.
Где-то это AR, где-то Manager/Entity.
Но никак ServiceLayer.
У Вас же получается, что модель — это все разом, и AR, и Manager/Entity подход ServiceLayer, что и вызывает батхерт.
Модель, т.е. бизнес-логика (почему вы модель от БЛ отделили?) — это по сути объект, который уже обращается к SL, AR, DM,…
Но в общем случае модель — это не только данные, но и методы по их обработке. А вот где они находятся — в сервисах или в других классах — вопрос десятый.
2k.livejournal.com/520078.html
offtopЧто-то мне подсказывает что следующую статью назовут:
Обзор «Обзор обзора».
По поводу данной и оригинальной статьи промолчу, все было сказано уже.
Мне вот интересно, а какие альтернативы битриксу народ использует в реалиях связки с 1С? Magento?
модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)
ActiveRecord в битриксе, где?! на дворе 2016 год, а модели битрикса методом getList до сих пор возвращают объект Main\DB\Result вместо массива из экземпляров класса модели, это не модели а плевок в лицо сообществу разработчиков.
bitrix не заводится на php7, и вряд ли заведется с огромным количество мусора в коде ядра, что уже говорит многом.
интернет-магазин веников с 5-ю наименованиями на битриксе — да пожалуйста, но делать на нем серьезные проекты это трудочасы в никуда — все равно в итоге переделывать придется на что-то другое.
С php7 сейчас как раз ведутся работы. Скоро и на нем будет запускаться. пока парочка модулей из всех не работает, скрытые ошибки не смотрел.
оно заметно что ведутся, обновления ломает напрочь тебе сайт и не дает откатиться обратно
Вот доказательство
hh.ru/vacancy/10488581?customDomain=1
Вы уверены? А открыть исходный код их главной страницы попробуйте: http://www.eldorado.ru/
И посчитайте сколько там раз встречается слово bitrix. Я 9 раз насчитал. Это при том, что они статику с отдельного домена отдают.
Там еще масса следов, показывающих, что это битрикс.
Может быть они и собираются уйти, но сейчас у них отдача контента битриксом идет.
Ну и одни ушли, другие пришли. Примеров крупных магазинов много:
www.oldi.ru
euroset.ru
www.svyaznoy.ru
www.shop.mts.ru
www.incity.ru
allsoft.ru
Примеры кода из 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 моделей и вы поймете, насколько вы заблуждались с адекватностью битрикса и его нового ядра.
На самом деле там лежит объект Query. Все примерно так, как вы привели в своих ссылках.
Вот его описание в документации: 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
Кстати, почему вы говорите о неизвестных параметрах? Набор параметров строго определен и вольностей здесь нет.
Так же в ваших эмоциональных выражениях кроме эмоций нет ничего. Объясните чем это плохо и какие проблемы создает?
Ладно бы его уже его исправили, но нет. Скоро уже год будет этому багу…
Автор выбрал элегантный способ хабрасуицида :)
но если говорить про сравнение, то это тоже самое что смотреть код 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: Битрикс, перепишите к черту свою систему заново, в ней нет ничего такого за что стоит цепляться и взращивать монстра.
Но меня всегда смущало, почему php_admin_value open_basedir «none»?
Неудобная архитектура (? cкорее даже фреймворк), постоянные сбои с выгрузками со стороны 1C, проблемы со встроенными инструментами (визуальный ректор) огромные размеры дистрибьютивов, и просто фантастические требования к серверу — чем не хейтерство?
Хотя да, если вы хотите очень быстро открыть простой интернет магазин взяв за основу нормальную базу 1С и шаблонный дизайн, то это правильный выбор. Правда при всех выше указаных вещах скорее всего вам не нужен интернет магазин.
Все выше сказаное имхо, и на состояние 2 года назад.
Это на любой системе, хоть битрикс, хоть джомла, хоть друпал и любая другая, не правильно брать и нарушая все правила писать на голом php, делать прямые запросы и реализовывать свой код внутри системы.
А потом придет другой разработчик, и будет ругаться, что это за битрикс такой плохой, что тут ничего не понять?
Так же не совсем понятно, что значит «голый php»? Вы вместо написания компонентов, прямо php код на публичных страницах размещали, делали прямые запросы к бд (возможно к таблицам инфоблоков запросы?)?
Приведите пару примеров того, что вы делали на голом php и как вы это все реализовали.
И почему localstorage? Для авторизованного пользователя так же? Т. е. если я добавил товары в корзины с одного компьютера, а захотел оформить заказ с другого: у меня это не получиться?
И к слову, корзина обычно не занимается оплатой и прочими вещами. Она хранить добавленные туда товары. А оформление заказа уже оформляется отдельный компонент. По факту это и отдельный шаг, ведь в магазине может и не быть корзины и она может пропускаться.
Но я допускаю вариант того, что у вас идет просто игра слов. Вы используете всю структуру битрикса, его API, а там где функционал битрикса не покрывается задачи заказчика, то все разработчики пишут на «голом PHP». Создают свои компоненты или модули и реализуют там свой код.
Например, в вашем случае может быть так, что вы реализовали на младшей редакции, без интернет магазина некоторую упрощенную корзину, которая в простом варианте позволяет вам оформлять заказы (если эти две вещи совместить). Но здесь нет ничего сверхъестественного: так делают большинство разработчиков на битриксе.
А вообще, когда вы пишете код не только для себя, а для других. Когда ваше 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();
Шаблонное поведение как раз таки у большинства тех кто писал здесь комменты, т.к. вы просто ненавидите Битрикс, и пишите переходите на Symfony, на Laravel, никто даже Yii не упомянул(((( А то что не умеете и не хотите в нем разбираться, это как то опускается, при чем большинство писавших и минусовавших вообще никогда не писали на Битрикс.
То что ты прочитал про паттерны на википедии делает тебя асом в архитектуре? Как по мне, ты знаешь только MVC и считаешь, что это круто, а все остальное это не архитектура вовсе (при чем MVVM, MVP тоже для тебя не архитектуры). Так кому стоит читать про паттерны?
Сайт http://actorswanted.ru весь на Yii2, но исходники закрытые (так что это недоказуемо, на слово придется поверить что его я делал).
Сейчас конечно начнешь мазаться, что типа это херня, все криво сделано и т.д. но да ладно.
P.S. я комменты пишу один раз в неделю уже наверное (спасибо всем большое), так что активной беседы не получиться.
По крайней мере, вы собрали адекватную статистику о том, какие чувства разработчики испытывают от работы с Битрикс.
А я оказался крайний, несправедливо
Что несправедливого в том, что сообщество ответило на вашу публикацию теми инструментами, которые у него есть?
Глупость называть кашу творящуюся в битриксе архитектурой, цитировать руководство и говорить что там есть MVC, которого там нет и близко.
И тем более говорить, что компонент для синхронизации с из коробки 1С годен на что-то большее, чем работать в какой-нибудь демке, в идеальных условиях.
Примерно эту мысль, сообщество и донесло всё это стандартным здесь образом. Кто-то в комментариях, а кто-то в рейтинге.
Как по мне, ты знаешь только MVC и считаешь, что это круто, а все остальное это не архитектура вовсе (при чем MVVM, MVP тоже для тебя не архитектуры)
Так по вашим же словам, в Битриксе MVC? Зачем в этом контексте поминать MVVM и MVP?
Зачем переходить на фреймворки, если есть Битрикс и можно на нем зарабатывать деньги?
Чтобы развиваться как разработчик, и, потенциально, зарабатывать больше денег?
господи, битрикосиды, просто смиритесь с тем, что вы работаете с куском бесперспективного, устаревшего, плохо спроектированного говна, который покупают только люди, которые в it шарят только как двигать мышкой по экрану и им это тупо втюхали инфоцыгане, которые из ваших же рядов... Просто признайтесь себе в этом. Не надо рассказывать какой он "не плохой"... Это полное архитектурное говно с какой стороны ни посмотри. Это просто дно... Куда ни глянь - одни косяки.
Это как с алкашкой... Вам надо самим принять проблему, чтобы излечиться. XD
Дальше 5 страницы просто не стоит читать, чтобы понять, что ты вляпался и уже воняет.
Обзор обзора минусов Битрикс, или чувак читает только первые 5 страниц