Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Года три назад я познакомился с отличным инструментом под названием Yii2 и стал тесно с ним работать.
примеры кода и подходы более правильные
Посетите форум Yii2 сообщества и посмотрите на примеры публикации кода
Раньше я всегда двумя руками защищал Yii2 и грешил, что Symfony2 медленная, жирная, в ней много чего не нужного и тп.
Собственно а что вам не нравится в laravel?
PHP сегодня не сможет соревноваться в фронтенде сс js/node, с тем же go в быстродействии и т.д.
Как-бы решает дискомфорт с приложениями в basic, но появляется новый дискомфорт. У нас в проекте появляется тонна конфигов для каждого приложения + общие и все модели начинают делиться между приложениями и наследовать друг друга. Еще в некоторых случаях приходилось перекрывать реляции, чтобы дергать классы моделей текущего приложения, а не общего.
Дело в том, что разработчики самого Yii2, слишком дословно трактовали MVC при разработке инструмента. В результате модель получается таким божественным классом, который делает все. Модель обычно в лучших традициях унаследована от ActiveRecord, работает с формами, валидацией, содержит логику, реляции, еще одну логику, еще сценарии, и еще 10 логик на каждый сценарий и еще одну логику для логики логик.
В одном проекте я был свидетелем того, что разработчики придерживались идеи MVC, делали тонкие контроллеры и жирные модели.
ActiveForm, тут просто facepalm. Это не очень гибкая штука как и 90% виджетов Yii2, они рассчитаны на быструю разработку ну скажем прототипов или максимум админку. Но использовать эти виджеты в большом и сложном проекте не очень хорошая идея. Практически не реально воплощать в жизнь извращенные задачи клиентов. Еще как претензия, это то что разработчики Yii2 прилично смешали php код с js, это можно наблюдать в валидаторах. И на послед, это то что все поголовно зависит от jQuery. Не скажу, что это плохо, но есть еще такой замечательный framework как vanilla (если вы понимаете о чем я ;)).
есть практики, где принято всю бизнес-логику запихивать в модели, хотя очевидно ее надо выносить в сервисный слой.
Сервисный слой — деталь реализации контроллера
А вот как раз модель ничего не знает и не хочет знать о том, как она хранится и хранится ли вообще
Контроллер — адаптер между приложением и HTTP.
Приложение не зависит от UI, UI зависит от приложения.
Вы путаете понятие «модель» и «сущность».
Как говаривал Эрик Эванс — выражайте модель через сервисы и сущности.
И да, скажите, вам правда так «удобнее» воспринимать все это?
То есть простая до ужаса идея отделения UI от приложения
Адаптер между HTTP и приложением в нашем случае — php-fpm или mod_php, плюс фронт-контроллер, передающие в конкретный контроллер уже данные приложения
public function anyControllerAction(Http\Request $request) {
$resultDTO = $this->get('some.app.service')->doSomeStuff($request->get('foo', $request->get('bar'));
return new Http\JsonResponse($resultDTO, 201);
}
Приложение состоит из UI, модели и «клея», обеспечивающего их взаимодействие. Клей принято называть контроллером в Model2 :)
Не путаю. Но смешиваю, да. как и Эванс :)
Ветка началась с утверждения, что бизнес-логику нужно помещать не в модели, а в сервисах
Да, может получиться толстый контроллер, если инфраструктуры много
Инфраструктура так же выносится в сервисы уровня инфраструктуры. Раз уж мы про слои заговорили. Это все же логика приложения.
Дело в том, что разработчики самого Yii2, слишком дословно трактовали MVC при разработке инструмента. В результате модель получается таким божественным классом, который делает все.
если только каждый экшн не выносить в отдельные файлы, что тоже гемор
Так всегда работаешь с минимальным количеством кода, пусть и файлов плодиться куча.
что для веба куда практичнее делать жирные контроллы и тонкие модели (в меру конечно)
что MVC для веба (не бизнес приложений) плохая идея
1) дублирование кода.
MVC — чисто GUI архитектура, которую изначально придумали как решение проблем десктопных приложений.
делаем API для мобильных приложений — начинается веселье
Почему все забывают старые добрые Сишные функции?
это всё было сделано для StateFull систем, а современный веб как правило StateLess
А вообще есть мысль, что под словом MVC сейчас все понимают разные вещи и его применяют часто не к месту.
Почему все забывают старые добрые Сишные функции?
непонятно как в Python все живут с import и без autoload
но если уж выбран курс на ООП, то к чему нам функции?
Развивать функциональщину вместо ООП?
Тогда еще у меня были очень большие проблемы с архитектурой, хотя должен признать, что сейчас они тоже есть, но не в таких масштабах. Поэтому, когда я натыкался на множество ошибок, я не придавал им значений, а когда проект вырос, было уже поздно.
Поэтому старайтесь не повторять таких ошибок и не начинать свое обучение на Yii2.
Если все модели наследуем от ActiveRecord, то на выходе по перспективе получаем так-же букет из проблем. Возможно будет такая ситуация, когда мы унаследуете frontend и backend модели от common моделей, которую в свою очередь от ActiveRecord. Но что будет если вдруг по мимо общей логики, нам потребуется разная логика в frontend и backend приложениях? Скорее всего начнутся перекрывания сценариев, событий таких как afterSave, beforeSave и много других интересных штук. С которыми я сталкивался почти везде.
В одном проекте я был свидетелем того, что разработчики придерживались идеи MVC, делали тонкие контроллеры и жирные модели. В результате чего можно было наблюдать несколько моделей из 10 000 — 15 000 строк кода, которые были связанны чуть ли не с большей половиной всего проекта. Естественно настал момент, когда все крестились и просто боялись их трогать, зная что если что-то сломают может полететь весь проект. Это не критично на небольшом проекте, но если проект набирает популярность и разрастается, ждите беды.
Если все модели наследуем от ActiveRecord, то на выходе по перспективе получаем так-же букет из проблем. Возможно будет такая ситуация, когда мы унаследуете frontend и backend модели от common моделей, которую в свою очередь от ActiveRecord. Но что будет если вдруг по мимо общей логики, нам потребуется разная логика в frontend и backend приложениях? Скорее всего начнутся перекрывания сценариев, событий таких как afterSave, beforeSave и много других интересных штук. С которыми я сталкивался почти везде.
ActiveForm, тут просто facepalm. Это не очень гибкая штука как и 90% виджетов Yii2, они рассчитаны на быструю разработку ну скажем прототипов или максимум админку. Но использовать эти виджеты в большом и сложном проекте не очень хорошая идея. Практически не реально воплощать в жизнь извращенные задачи клиентов. Еще как претензия, это то что разработчики Yii2 прилично смешали php код с js, это можно наблюдать в валидаторах. И на послед, это то что все поголовно зависит от jQuery. Не скажу, что это плохо, но есть еще такой замечательный framework как vanilla (если вы понимаете о чем я ;)).Тот подход который навязывают виджеты действительно тяжеловесный, в большом и сложном проекте у вас скорее всего будут самописные (или переделанные) виджеты, тк все универсальное имеет много лишнего в угоду универсальности. JS часть виджетов нужно отключить на уровне ассетов и сгруппировать и упаковать grunt`ом например. ЭктивФорм надо уметь готовить, в процессе разработки у вас должно было появится понимаение какие и как формы используются, и уже имея понимание, нужно сделать свою обертку, благодаря которой у вас описание самыех сложных форм будет укладываться в несколько строк.
Но при этом не слышать про паттерны, это новичок?
Или например можно знать php, работать с паттернами, но не разу не писать тесты, это новичок?
А можно знать php, знать паттерны, писать тесты, но не знать про DDD.
Что значит знать php?
Кто такой новичок?
даже не догадываясь про существования таких понятий архитектуры, которые мы обсуждаем.
Вычитал, но не понимает. Знает что так нужно.
Нет, бывает когда дедлайн и ты в чужом коде. Но так чтобы сам…
не накладывающий на разработчика груз рамок и ограничений.
Низкий порог входа, логичная архитектура, удобная документация и большое грамотное сообщество.
А без опыта любой фреймворк приведет в АД. Вопрос в том, насколько просто будет из него выбраться.
понятия не имел о существовании например DI, да и вообще паттернов как таковых
прочитал книжку и начал подозревать Yii в халтуре.
Потом оказывается узнал про репозиторий и сервисы.
И этапы этого примерно года два
Но теперь я знаю ответ, что это хорошие инвестиции в будущее.
Ну так это проблема лично ваша а не фреймворка) Собственно это основная проблема большиинства разработчиков — фреймворк это центр вселенной и все чего там нет знать не надо. А расширять кругозор — зачем… и так хватает о чем беспокоиться.
Мне попалось два проекта:
впервые работаю в офисе и получил проект из западного рынка, которые написаны не просто плохо, а с максимальным количеством зла.
От сюда вопросы, зачем DDD?
Еще я заметил, что yii очень плохо поддается принципам SOLID
засматриваться на симфони
когда проект стал все больше и больше и нужно было делать все быстрее и быстрее и все сложнее функционал.
Разработка приложений на Yii2 без опыта — прямой путь в АД