Я - фанат 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)


  1. hello_my_name_is_dany
    14.11.2021 06:29
    +5

    Даже на там же Laravel умудряются по разному писать (стандартное разделение vs модульное). Это плохо? Не думаю. Хотите стабильности? Так идите работать с WordPress или другими популярными CMS.

    Посмотрите в сторону других фреймворков, не только RoR-liked, и окажется, что довольно много фреймворков не дают какой-то определенной архитектуры, оставляя это на разработчике.


  1. bagger
    14.11.2021 08:11
    +4

    Уже несколько лет существует устойчивый тренд на использование микросервисной архитектуры, yii3 лишь следует этим трендам.


  1. pilot114
    14.11.2021 09:45
    +12

    Автор молодец, задает правильные вопросы.

    Если вы подразумеваете под архитектурой принцип, по которому файлы
    раскидываются по папочкам — да, есть такая тенденция, что фреймворки
    это регламентируют все меньше. Как минимум, есть 2 фундаментальных принципа —
    разложить по типам (контролеры / вьюшки / исключения и пр.) или же
    разложить по фичам (например, есть папка User, в которой все что связано с юзером).
    Эта неопределенность действительно немного усложняет вхождение в проект,
    но при четком следовании заложенным изначально принципам (которые по хорошему
    нужно первый пунктом описать в документации проекта) это не большая проблема.

    Под архитектурой проекта можно понимать и логическое деление на компоненты,
    а также регламент их взаимодействия. Например, в каком порядке выполняются обработчики запроса или как приложение обрабатывает исключительные ситуации. Это уже завязано на поток выполнения, который контролирует сам фреймворк, и именно это отличает фреймворк от библиотеки. Эти составляющие неизменны и именно их понимание определяет умение разработчика работать с фреймворком.


  1. BetsuNo
    14.11.2021 10:21
    +6

    Админ прав: Фреймворк не должен влиять на архитектуру. Как правило есть некоторые договорённости о структуре приложения, например: шаблоны basic и advanced в yii, которые, хоть и не кардинально, но отличаются между собой. Но этим договорённостям не обязательно строго следовать.


  1. 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 ситуация не повторится, так что не стоит заранее сокрушаться =) Остается только дождаться релиза


  1. mgis
    14.11.2021 19:11
    +1

    Примерно те же чувства испытал, пересев с Django на FastApi.
    Первый дает какую-никакую, но структуру проекта, все лежит в одной папке, все приложения в своих директориях, и модели, роуты, представления все разложены по своим файлам. Все понятно, пиши код, да радуйся.

    Во втором полная свобода действий. Что самое страшное, когда джун вроде меня старается написать, что то на FastApi с более менее нормальной архитектурой и идет читать доку, а там тоже весь код приложения располагается в одном файле становится очень грустно. Потому и приходится по крохам изучать архитектуру "чистого кода". Да это сложно, да это больно, но есть мнение, что так лучше. Так и живем.


  1. HellWalk
    14.11.2021 21:48
    +5

    Уже примерно два года я жду релиза Yii3. Я ждал, что это будет крутой монолит, как и вторая версия, но сильно доработанная и с новыми плюшками. Но, как оказалось, Yii3 идёт вообще по другому пути.

    В этом пути нет ничего необычного - фреймворк делится на отдельные компоненты, каждый из которых выполняет свою задачу.

    Фреймворк Symfony написан по таким принципам, и это не мешает ему иметь "структуру папочек" по умолчанию. Впрочем, как и не мешает программистам изобретать на нем велосипеды, в которых сразу и не разберешься.

    Чтобы понять в чем проблема архитектуры Yii2 (помимо прочего, и, к слову, опыт написания юнит тестов очень поможет увидеть основные проблемы) - попробуйте, например, разобраться как в нем сделана защита от csrf-атак - там один метот из одного класса, другой метод из другого класса и так во всем. Задача одна - а делается она кусочками по разным частям фреймворка. Принцип, по которому сделана симфони, и по каким принципам делается Yii3 в том, что такой размазанности ответственности не будет. Есть задача - и за эту задачу отвечает один компонент, все.

    Структура "папочек" как была по умолчанию, так и останется (пусть с изменениями) в Yii3. Не в том заморачиваетесь. Я бы обратил внимание на другое - 5 лет вы заниматься разработкой на фреймворках, и не начали осваивать авто-тесты - это серьезное упущение.


    1. QeqReh
      15.11.2021 13:18

      У Symfony кстати есть какое-то соглашение по структуре проекта?


      1. BetsuNo
        15.11.2021 14:57
        +1

        Да. В best practices описана структура проекта по умолчанию, и в доке по бандлам есть описание структуры для бандлов.


    1. kvadrokot
      19.11.2021 01:17

      там один метот из одного класса, другой метод из другого класса и так во всем

      ужас какой


  1. reaferon
    15.11.2021 12:13
    +1

    Я заметил, что спустя 5 месяцев после того, как я подписался на этот канал, развития практически не было.

    https://t.me/yii3chronicles - хроники работы над yii3 практически в realtime-режиме


  1. PraS
    15.11.2021 13:19
    +3

    Автор предпологает под архитектурой то, что заточено в шаблоне, что модели должны лежать в папке models, контроллеры в папке controllers и т.д. Но это не архитектура приложения, а структура расположения папок и файлов и фреймворк никак не должен ограничивать это дело.

    Просто есть готовый шаблон приложения на который можно ориентироваться. Но это все подходит для самых простых проектов, где через gii нагенерили CRUD и все.


  1. tempick Автор
    16.11.2021 03:01

    Спасибо всем за комментарии! Да, я понял свою ошибку, спасибо всем. Также спасибо за то, что восстановили мою карму. Если честно, ожидал, что мне нафигачат десяток минусов сверху.