Он уродлив, нарушает все принципы SOLID, да и вообще все принципы обьектно ориентированного проектирования. Так почему от него так тащатся в рунете, если есть symfony2, laravel?
Потому что так сложилось, что большинству WEB разработчикам в мире PHP почему-то плевать на все эти "fancy patterns", SOLID и прочее. Зачем людям тратить время и разбираться в best-practice когда можно взять и лепить сайты.
Скажу откровенно, на момент выхода Yii1.0 это было действительно что-то новое в мире PHP. Но за отсутствием качественного развития - сдулось.
Вопрос лично к вам. Можно ли найти нормальную контору, где разрабатывают на симфони, или ради нормальной разработки переползать на тот же ror, где, к примеру, эджайл и ТДД являются нормальной постоянной практикой? Просто когда смотрю на код Yii хочется плакать
@young8junkie RoR не панацея. Пару раз приходили проекты на RoR написанные через одно место. То есть тут нужно объективно оценивать разработчиков, проводить собесы и т.д.
Конторы которые разрабатывают на симфони, через TDD/BDD/DDD имееются, причем даже не мало, но все что я знаю работают преимущественно со штатами/англией. Да и рейты у таких контор... Словом дешевле найти разработчиков-фрилансеров с большим опытом работы с симфони, и выставить жесткие требования.
нарушает все принципы SOLID, да и вообще все принципы обьектно ориентированного проектирования
Потому что эти сферические принципы в вакууме нафиг не нужны и не важны. Важно то, насколько хорошо и быстро инструмент позволяет создавать продукт. Yii позволяет. Поэтому он крут и его все любят. Ну и плюс очень развитое и дружелюбное сообщество, в т.ч. русскоязычное.
Ага, быдлокодерам не важны. Не сферические они, если немного включить мозг и подумать зачем они нужны. Быстро наговнокодить на Yii можно, но вот хорошим это не назовёшь.
@fornit1917, они не нужны для проектов однодневок, типа стандартные бложики/сайты визитки и т.д. Но если проекту требуется развития, нужны тесты, нужна минимизация накладных расходов на разработку (минимизация времени затрачиваемого на рефакторинг, поиск регрессий и т.д.) Все эти штуки, типа принцип единой отвественности, горы интерфейсов, слабосвязанные-системы и т.д. как раз таки и призваны сделать код динамичным.
Хороший пример когда эти "ненужные" штуки спасают проект - клиент с безлимитным бюджетом (то есть вы работаете пока он платит деньги, нету фиксированных сроков и т.д.), который на момент начала проекта не знает и на 10% того, что он хочет в итоге видеть. Тут годятся только слабосвязанные системы, когда один компонент не знает как работает другой. В Yii же у вас один компонент (ActiveRecord) отвечает и за хранение данных, и за хранение предметной области и за валидацию... В итоге вырастает иерархия классов, ибо нужно всегда иметь возможность перегрузить глобально метод delete допустим, для каких-то своих целей (типа той же внезапно появившейся в спеке версионизации). Я видел подобное, и не в восторге как-то.
Yii - хорошо на фикстпрайс с жесткими договорами, ТЗ и прочим. Но если у вас раз в месяц меняются требования, или же нужно часто расширять функционал (что обычное дело для больших проектов) можно упереться в растущие затраты на поддержку и дальнейшую разработку.
@Fesor я просто считаю, что если разработчик бестолковый - то ему никакой фреймворк не поможет.
На Yii разрабатываю давно. В т.ч. и крупный "ынтрепрайз" проект, в котором как раз часто меняются требования и переделывается/расширяется функционал. Вполне себе неплохо это на Yii получается. Команда у нас немаленькая, все разработчики хорошо понимают код друг-друга. Новые разработчики быстро вливаются. А если где-то говнокод и появляется, то это не вина фреймворка.
На Yii можно делать хороший и сложный софт. И на других фреймворках тоже можно, я нисколько не умаляю их достоинств. Но посколько вопрос был так поставлен, что мол "почему Yii так любят, ведь он же не соответсвует тому что пишут в умных книжках", то и я ответил так: не является это необходимым условием для того, чтобы быть хорошим годным инструментом. Практика это вполне доказывает на примере yii.
@fornit1917, я не пробовал Yii2 в плотную, но вот то что не решается без кастылей в Yii1: валидация форм (а точнее убогая реализация групп валидации), отсутствие мэппинга полей из базы в модель. Отвратительная работа со связанными сущностями (попробуйте поработать с пару месяцев на Doctrine, потом будете на Yii-шный AR смотреть с тоской), убогая система маршрутизации, некоторые вещи решаются только жирными классами CRoute, реализация CHttpRequest завязана на суперглобальных переменных (собственно как и в Yii2), от чего добавление таких полезных штук как мидлвары крайне неприятное удовольствие. Так же крайне неприятно вводить штуки аля ParamConverter в Symfony (довольно удобная штука иногда).
Я не спорю что можно, но у вас нету достаточного опыта работы с другими фреймворками.
p.s. Это очень грустный код... Согласитесь, необходимость в подобных велосипедах не от хорошей жизни.
он так популярен, потому что там ActiveRecord и как бы "всё в одном", для быстрой разработки. Ещё на нём можно быстро запилить сайтик и есть хорошая русская документация.