Фреймворки: перехід з Yii2 на Laravel. Інтерв’ю з back-end розробником

Про особливості фреймворків Yii2 та Laravel та чому було вирішено здійснити перехід з одного на інший - говоримо з тімлідом нашої команди back-end розробників - Олександром.
– Олександре, чому було вирішено переходити з Yii2 на Laravel? Яка різниця між ними?
Порівнювати фреймворки досить холіварна тема, результат якої зазвичай свідчить, що кожен з них – має свої переваги. Я працював з обома, спробую роз’яснити свій підхід до вибору фреймворка.
Відразу попереджаю про те, чому ми не розглядаємо Symfony.
Symfony – більш низькорівневий фреймворк, який частіше беруть за основу у великих проектах. Наприклад: написання власного фреймворка для розробки. Його в принципі не можна порівнювати з Laravel і Yii2, бо вони використовують його компоненти в своїх реалізаціях.
Symfony – потужний продукт, що дозволяє гнучко налаштовувати практично будь-яку систему під потреби. Але в ньому мало що можна використовувати в якості готових рішень для дрібних, типових задач. На GitHub можна зустріти безліч бібліотек або розширень написаних для того ж Yii2 або Laravel якраз на Symfony.
Yii2
Почнемо з Yii2, так як це – мій перший фреймворк, який я вивчив. До речі, вивчається даний фреймворк дуже легко, при мінімальних знаннях ООП (об’єктно-орієнтоване програмування – прим. ред.).
Переваги Yii2
- Легко вивчається, низький старт розробки
- Має безліч вбудованих рішень для інтерфейсів
- Відмінний генератор моделей, контролерів І CRUD
Недоліки Yii2
- Монолітність фреймворку
- Погано розвивається (вихід нових версій)
- Занадто “склеєні” бібліотеки для frontend’а з backend’ом
– А можна більш детально по кожному з пунктів?
- Легко вивчається. Це дійсно так. Посидівши день-два, над невеликим проєктом, ви вже починаєте спокійно кодити на ньому. Зовсім нещодавно, вони оновили свій сайт з гайдами і документацією.
- Вбудовані рішення для інтерфейсів можна описувати дууу-уже довго, але я постараюсь коротко. У систему вбудований Bootstrap, на жаль поки третій… і купка власних модулів, які з ним пов’язані.
Можна навіть погано володіти версткою на Bootstrap, і при цьому – за допомогою вбудованих в Yii2 методів зробити спливаючі модальні діалоги, віконця, що випадають списки, спойлери і т.д. - Генератор моделей, контролерів – окремий момент, але частково пов’язаний з попереднім. У Yii2, є якась GUI область, для вибору різних генерацій. Зверніть увагу, у інших фреймів, якщо і є генератори – то, як правило, лише консольні. Тут є і інтерфейс? і дуже зручно користуватися, називається ця краса – gii.
Моделі генеруються не як в Laravel. В інтерфейсі вказується таблиця, назва і розташування класу для моделі. З урахуванням простору імен, програма сама підтягує всі залежності (можна відключити, якщо не потрібні), якщо розставлені foreign key, і «викочує» модель, зі всіма властивостями взятими по колонках таблиці і методами для зв’язки з іншими (якщо вони є).
CRUD генерує готові інтерфейси, контролери до них, для управліннями даних у зазначеній йому моделі. Тобто, спочатку потрібно створити модель, а потім робити CRUD генерацію. На виході, ви отримаєте відразу готовий інтерфейс з певною адресою, в якому можна заводити нові записи таблиці, редагувати і видаляти їх.
Дуже зручно використовувати для створення панелей адміністраторів або дашбордів. Швидко генерується готовий інтерфейс, який потім можна відредагувати, і користуватися, призначивши захист роутам шляхом авторизації, або інакше. Сам інтерфейс використовує безліч вбудованих віджетів, які теж можна переналаштовувати на свій розсуд.
Це – дійсно швидка розробка систем з інтерфейсами управління даних. Можна досить швидко зробити окрему CMS для потреб конкретного проєкту. Як на мене, це – головний плюс Yii2 в порівнянні з іншими фреймворками.
Тепер – більш детально про недоліки.
- Фреймворк є монолітним. Вся розробка в сучасних реаліях зводиться до боротьби з ним. Велика “зв’язаність” частин фреймворку, що робить важким використання сторонніх компонентів.
Невідповідність solid принципам, велике змішування зон відповідальності. Повсюдне використання сервіс-локатора. Фреймворк ідеально підходить для швидкого прототипування, щось серйозніше на ньому писати дуже боляче. - Повільно розвивається – рішення в ком’юніті приймаються дуже повільно.
Слід звернути увагу, що Yii2 досі використовує Bootstrap-3, і нового за останній час в ньому додалося досить мало.
- Ну і останній пункт – це завелика “склеєність” фронтенда з бекендом. Безліч віджетів та ін., відразу роблять генерацію готових рішень в представленнях (views). Це – добре і швидко. Але багато хто з них, викидають скрипти прямо в тіло сторінки, в коді цих віджетів перемішаний php і html, що не дуже добре виглядає. Підтримувати такий код є досить проблематичним.
Такий метод розробки не дозволяє використовувати збирачі, типу WebPack, Gulp або ін. Тобто, використовувати можна… Але доведеться відмовитися від основної переваги Yii2 – не користуватися генераторами і готовими рішеннями для інтерфейсу. Не застосовувати класи, які дозволяють збирати скрипти і css в assets і тому подібне. А якщо відмовитися від них, що тоді залишиться?..
У сучасній розробці все йде до того, щоб якомога далі відокремити frontend від backend, і в цьому плані Yii2 застарів.
– А як щодо Laravel?
Так, оскільки ми досить детально познайомилися з Yii2, давайте порівняємо його з Laravel.
Переваги Laravel
- Компонентна архітектура
- Має вбудований білдер скриптів і scss
- Вбудований шаблонізатор Blade
- Гнучке формування роутів
- Гнучкі можливості для написання REST API
- Швидко розвивається
Недоліки Laravel
- Великий функціонал працює через фасади
- Вивчається трохи складніше Yii2
- Немає офіційної документації російською мовою
- Немає вбудованих генераторів інтерфейсів
- Вищий поріг входження
Компонентна архітектура дозволяє проектувати систему дуже гнучко. Можливість легкого використання сторонніх пакетів. Слідування solid принципам, часті оновлення та дотримання/впровадження нових стандартів psr. Фреймворку дорікають за його фасади, але по-суті він дозволяє їх і не використовувати. Вся архітектура – в твоїх руках.
Вбудований білдер заснований на WebPack, фактично це – надбудова над ним. Вона дозволяє легко почати роботу і збирати frontend НЕ копаючись в великих мануалах по WebPack і його налаштуваннях.
В системі він зветься Laravel mix, і це по-суті WebPack, вже налаштований під більшість завдань, де ми просто вказуємо звідки беремо вихідні, і куди кладемо результат.
Приклад mix’a
У прикладі стандартна конфігурація, яка у вас з’являється відразу після інсталяції фреймворка. Таких міксів там можна створювати скільки завгодно багато, якщо у вас є поділ декількох frontend додатків.
Мікс відразу вміє збирати scss, однофайлові компоненти Vue, а так само в нових версіях Laravel, Vue.js йде відразу в постачанні фреймворка.
Отже, на 2019 рік – фреймворк Yii2 застарів. І це – об’єктивно. Нові проекти на ньому, переважно, вже не починають робити. Вивчаючи Yii2 в 2019 році – ви прирікаєте себе на підтримку відносно не нових проектів з кодом не кращої якості. Що буде з Yii3 – важко сказати.
Тому, було прийнято рішення рухатись в напрямку нових технологій. Зважено плюси і мінуси, час переходу. Ми у Web-Systems Solutions обрали Laravel – з його величезною еко-системою, яку реально розвивають.
– Які труднощі виникали в процесі переходу?
Серйозних труднощів не було, є багато матеріалів для вивчення + хороша документація і гайди на офіційному сайті. Та й не тільки. Головне бажання – і все вийде!
– Які поради можна дати тим, хто здійснює такий перехід? І що це дасть у результаті?
Не сумніватись у вибраному рішенні, не зупинятись на півдорозі. В результаті ви отримаєте сучасну технологію, якою приємно користуватись і розвиватись разом з нею.
– Що, на твою думку, є найцікавішою частиною роботи back-end розробника?
Постійний рух і вивчення нових технологій. Проєктування архітектури веб-додатку, впровадження нових підходів. Бекенд тісно пов’язаний зі сферою devops – тому постійно доводиться розширювати кругозір й світогляд. Постійний пошук кращих рішень. Велика кількість нестандартних задач, які змушують добряче помізкувати.