Я - фанат yii2. Да, несмотря на многие его недостатки, я смог его полюбить и примерно 5 лет зарабатываю на хлеб с маслом благодаря его разработчикам.
Уже примерно два года я жду релиза Yii3. Я ждал, что это будет крутой монолит, как и вторая версия, но сильно доработанная и с новыми плюшками. Но, как оказалось, Yii3 идёт вообще по другому пути.
У Yii3 есть канал в telegram https://t.me/has_yii3_released , где каждый день в 10:10 выкладывается пост с текущим состоянием разработки Yii3. Я заметил, что спустя 5 месяцев после того, как я подписался на этот канал, развития практически не было. Тогда я решил написать в чате фреймворка (https://t.me/yii3ru) с предложением внести свой труд в разработку. Т.к. я ещё "недомиддл", то меня вежливо отправили обучаться тестированию (без сарказма, реально вежливо).
И тут я решил поинтересоваться, насколько сильным конкурентом он может стать laravel. На что мне ответил один из админов "Я не знаю, но технически получается хорошо :)"
НО! Далее мне рассказали, что (Я - это я, А - админ канала)
А: yii3 сам по себе не даёт архитектуру, можно раскидать всё как угодно, но есть шаблоны приложений, которые предлагают некоторую архитектуру
Тогда у меня возник вопрос, а зачем нужен тогда фреймворк, если он не даёт архитектуру?
А: Он даёт инфраструктурные штуки: роутинг, логи, мидлвари, кэш и т. д.
А архитектура приложения может быть вообще любой, в этом и прелесть.
Я: а как разбираться (мне, фрилансеру), если чел в проекте решил сделать какую-то свою архитектуру? Может я тупой, но не улавливаю смысла. Зачем это? Разве это не выглядит как просто набор библиотек, установленных через композер? не увеличится уровень погружения в проект для программистов?
А: Ну по сути так и есть - набор библиотек
Я отвечаю:
ну вот я вижу заказ условный "доработка проекта на yii2/laravel" - в этом случае я уже знаю, что где лежит и где что мне искать. Для студии/компании, которые используют в проекте фреймворк будет проще найти разработчика, а разработчику будет минимум времени для того чтобы влиться в проект. Разве не в этом смысл любого фреймворка - задать четкую архитектуру?
Ответ админа:
А: Приложения разные и архитектура в них может быть разной. В идеале архитектура приложения вообще не должна зависеть от фреймворка
К чему я это всё: мне одному кажется, что чем архитектура более строгая, тем меньше порог входа для программиста. которого вы нанимаете? И тем проще одному разработчику разобраться в коде проекта, на который он пришёл? Я считаю, что в этом и есть прелесть фреймворков - дать архитектуру, основу, благодаря которой новый разработчик на проекте может влиться в разработку с минимальными затратами. А с Yii3 будет, наоборот повышение порога входа и проблемы для всех.
Я сам - фрилансер, и очень круто, когда на проекте с yii2/laravel у меня нет документации по сайту/приложению, но я знаю, где и что мне искать. (документация - это круто, но бывает очень редко). Но тут приходит Yii3 который позволяет тебе самому выстраивать архитектуру, а сам предлагает лишь набор пакетов. Я не особо фанат laravel, но, видимо, скоро придётся полностью уйти на него ибо на yii2 работы становится всё меньше и меньше.
Отпишитесь, пожалуйста, как вы к этому относитесь. Правда, я не смогу ответить сам ибо моя карма на момент написания этой статьи позволяет оставлять лишь один комментарий в сутки, а после её публикации я, скорее всего, не смогу писать вообще. Поэтому для хорошего аргументированного диалога жду в личку. Всем спасибо за прочтение!
Комментарии (13)
bagger
14.11.2021 08:11+4Уже несколько лет существует устойчивый тренд на использование микросервисной архитектуры, yii3 лишь следует этим трендам.
pilot114
14.11.2021 09:45+12Автор молодец, задает правильные вопросы.
Если вы подразумеваете под архитектурой принцип, по которому файлы
раскидываются по папочкам — да, есть такая тенденция, что фреймворки
это регламентируют все меньше. Как минимум, есть 2 фундаментальных принципа —
разложить по типам (контролеры / вьюшки / исключения и пр.) или же
разложить по фичам (например, есть папка User, в которой все что связано с юзером).
Эта неопределенность действительно немного усложняет вхождение в проект,
но при четком следовании заложенным изначально принципам (которые по хорошему
нужно первый пунктом описать в документации проекта) это не большая проблема.
Под архитектурой проекта можно понимать и логическое деление на компоненты,
а также регламент их взаимодействия. Например, в каком порядке выполняются обработчики запроса или как приложение обрабатывает исключительные ситуации. Это уже завязано на поток выполнения, который контролирует сам фреймворк, и именно это отличает фреймворк от библиотеки. Эти составляющие неизменны и именно их понимание определяет умение разработчика работать с фреймворком.
BetsuNo
14.11.2021 10:21+6Админ прав: Фреймворк не должен влиять на архитектуру. Как правило есть некоторые договорённости о структуре приложения, например: шаблоны basic и advanced в yii, которые, хоть и не кардинально, но отличаются между собой. Но этим договорённостям не обязательно строго следовать.
SakhalinDDF
14.11.2021 10:21+10На самом деле на yii2 можно сделать довольно гибкую архитектуру под проект, разнести код на разные модули, сделать разные точки входа (например разные для обычного пользователя и для убер админа), разнести код приложения по доменам если следовать DDD и тд. Есть конечно и приколоченный гвоздями функционал. Например расположение контроллеров, которые всегда должны лежать в одном неймспейсе, указанном в их модуле в свойстве $controllerNamespace и содержать в названии контроллера то что отражено в роуте. Или зависимость от jQuery (который зачем то надо ставить через composer, а не npm или yarn) в стандартных виджетах. Но даже тут есть гибкость в более тонкой настройке роутера и в переписывании стандартных ассетов на нестандартные.
Мне кажется что никакой фиксированной архитектуры в случае yii2 нет, но есть предложенные от разработчиков 2 шаблона приложения, yiisoft/yii2-app-basic и yiisoft/yii2-app-advanced, и 95% проектов на yii2 следуют этим шаблонам с минимальными расхождениями, поэтому появляется ощущение "жесткой" архитектуры. И не исключено что с yii3 ситуация не повторится, так что не стоит заранее сокрушаться =) Остается только дождаться релиза
mgis
14.11.2021 19:11+1Примерно те же чувства испытал, пересев с Django на FastApi.
Первый дает какую-никакую, но структуру проекта, все лежит в одной папке, все приложения в своих директориях, и модели, роуты, представления все разложены по своим файлам. Все понятно, пиши код, да радуйся.
Во втором полная свобода действий. Что самое страшное, когда джун вроде меня старается написать, что то на FastApi с более менее нормальной архитектурой и идет читать доку, а там тоже весь код приложения располагается в одном файле становится очень грустно. Потому и приходится по крохам изучать архитектуру "чистого кода". Да это сложно, да это больно, но есть мнение, что так лучше. Так и живем.
HellWalk
14.11.2021 21:48+5Уже примерно два года я жду релиза Yii3. Я ждал, что это будет крутой монолит, как и вторая версия, но сильно доработанная и с новыми плюшками. Но, как оказалось, Yii3 идёт вообще по другому пути.
В этом пути нет ничего необычного - фреймворк делится на отдельные компоненты, каждый из которых выполняет свою задачу.
Фреймворк Symfony написан по таким принципам, и это не мешает ему иметь "структуру папочек" по умолчанию. Впрочем, как и не мешает программистам изобретать на нем велосипеды, в которых сразу и не разберешься.
Чтобы понять в чем проблема архитектуры Yii2 (помимо прочего, и, к слову, опыт написания юнит тестов очень поможет увидеть основные проблемы) - попробуйте, например, разобраться как в нем сделана защита от csrf-атак - там один метот из одного класса, другой метод из другого класса и так во всем. Задача одна - а делается она кусочками по разным частям фреймворка. Принцип, по которому сделана симфони, и по каким принципам делается Yii3 в том, что такой размазанности ответственности не будет. Есть задача - и за эту задачу отвечает один компонент, все.
Структура "папочек" как была по умолчанию, так и останется (пусть с изменениями) в Yii3. Не в том заморачиваетесь. Я бы обратил внимание на другое - 5 лет вы заниматься разработкой на фреймворках, и не начали осваивать авто-тесты - это серьезное упущение.
kvadrokot
19.11.2021 01:17там один метот из одного класса, другой метод из другого класса и так во всем
ужас какой
reaferon
15.11.2021 12:13+1Я заметил, что спустя 5 месяцев после того, как я подписался на этот канал, развития практически не было.
https://t.me/yii3chronicles - хроники работы над yii3 практически в realtime-режиме
PraS
15.11.2021 13:19+3Автор предпологает под архитектурой то, что заточено в шаблоне, что модели должны лежать в папке models, контроллеры в папке controllers и т.д. Но это не архитектура приложения, а структура расположения папок и файлов и фреймворк никак не должен ограничивать это дело.
Просто есть готовый шаблон приложения на который можно ориентироваться. Но это все подходит для самых простых проектов, где через gii нагенерили CRUD и все.
tempick Автор
16.11.2021 03:01Спасибо всем за комментарии! Да, я понял свою ошибку, спасибо всем. Также спасибо за то, что восстановили мою карму. Если честно, ожидал, что мне нафигачат десяток минусов сверху.
hello_my_name_is_dany
Даже на там же Laravel умудряются по разному писать (стандартное разделение vs модульное). Это плохо? Не думаю. Хотите стабильности? Так идите работать с WordPress или другими популярными CMS.
Посмотрите в сторону других фреймворков, не только RoR-liked, и окажется, что довольно много фреймворков не дают какой-то определенной архитектуры, оставляя это на разработчике.