Pull to refresh

Comments 64

Возможно, давным-давно на меня повлиял dreamviewer, но я никогда не пользуюсь генераторами кода. Не вижу ничего плохого в том, что бы в ide сделать шаблоны и самому создавать модели, контроллеры, etc. А вообще зашел почитать про то, как angular работает с yii, но ничего не увидел.
Действительно, в создании моделей руками ничего плохого нет. Но Gii довольно-таки неплохо экономит время разработчика, имхо.

только тогда когда "модель" это тупое объектное представление рядов таблицы. Ну то есть приложение по сути просто CRUD. Таких большинство, и потому в этом нет ничего плохого, но как только что-то сложнее и нужно заниматься "моделированием" бизнес логики с gii и подобными подходами разработчики быстро превращают код в неудобную кашу (пытаясь подогнать все под кодогенерацию а не под логику работы системы).

Тут от рук разраба зависит. Если быстро надо собрать тупую админку и потом руками дописать пару связей, как это нужно для 95% проектов, то годится и так.
По мне, лучше генераторы кода, чем визуальные редакторы — они более ограничены, а потому, более предсказуемы. Визуалки же (по крайней мере, раньше так делали) генерят ужасную разметку и код.
Но в целом, и то, и другое — для быстрого старта, все равно всегда приходится много перепиливать до рабочего состояния.
Лично я вообще редко, за некоторым исключением, пользуюсь генераторами (scaffolding), предпочитая писать все руками, пусть ценой очень долгого времени и затраченных усилий.
gii — это не dreamviewer. Он гораздо проще и оперирует ограниченым количеством шаблонов.
gii наиболее удобен в создании моделей по таблице в базе данных, т.к. сразу создаётся набор правил валидации, методы для relations и phpdoc со списком полей.
Да, просто это было лет 10 назад, не помню как правильно пишется.
Особенно хорошо самому писать модель с таблицы с 30 полями и 15 отношениями.
В своих проектах меняю исходные шаблоны gii, на основе которых он генерирует классы, так, как мне удобно. Значительно ускорят разработку. В любом случае, он умеет лишь генерировать скелет класса, не более. Ничего плохого в этом не вижу.
один вопрос — зачем использовать оверхед с Module если можно сделать также как в yii2 advanced template?
Как я писал в статье, приложение разделялось на модули, для того чтоб его было удобней разрабатывать и поддерживать код. Можно разделить разработку приложения помодульно на каждого разработчика. А также готовые модули возможно переиспользовать от проекта к проекту.
UFO just landed and posted this here
UFO just landed and posted this here
Чем jQuery можно усилить? Аngular'ом?
Помоему в AngularJS используется light версия для работы с DOM на основе jQuery.
Я думаю встроенных возможностей Angular достаточно для этого. А если нужны анимации и прочее… используйте плагины Angular, следите за ними через bower, npm итп…
> «можно выделить ряд преимуществ: ...»

Это не преимущества («превосходство в сравнении с кем-чем-н. другим») Yii, так как это есть во всех современных php фреймворках. И Некоторые превосходят (объективно или субъективно) Yii по части изложенных пунктов.

Для выбора технологий реализации "нетипичного" проекта, следует четко понимать, в чем именно нетипичность этого проекта, и как эти технологии с этой нетипичностью соотносятся. Если "типичные" и вполне заурядные технологии вам полностью подходят, как следует из статьи, то что там "нетипичного"? Мой личный опыт работы с "нетипичными" проектами кричит о том, что Angular использовать НЕ стоит, если "нетипичность" выше среднего.

Если она выше среднего то в общем то наверное и фреймворк общего назначения вряд ли подойдет.
Тут уже нужно брать разве что отдельные библиотеки типа ORM, DI и прочие, а архитектуру пилить исходя из «нетипичности» проекта.
В чем же нетипичность?
И технологии вполне себе типичные — jQuery, Angular и Yii — наверное, наиболее популярные фреймворки.
Мой личный опыт работы с "нетипичными" проектами кричит о том

А вы как ангуляр готовили? Жирные контроллеры, или маленькие компоненты и логика в сервисном слое? Писали тесты?


А про нетипичность и т.д. это лишь для красивого словца в заголовке, ибо ничего нетипичного я в статье не увидел.

Заголовок данной статьи почему-то мне сказал о том, что я тут увижу gii форм. Т.е. генератор кода формы с ангуларовским контроллером. Вот печаль, не увидел. Стоковый gii форм вещь полезная, но на выходе простые формы. Да, с валидацией, но без механики. Например, скрыть/показать поле при установке чекбокса. Для ангулара это в принципе одна директива. Но для этого нам нужно создать контроллер, задать модели полям. Если мы скрываем обязательное поле, значит придётся переделывать серверную и клиентскую валидацию yii. В общем уже не вписывается в идеологии gii «Ахалай-махалай, по модельке сгенерись». А если бы генератор форм это сам всё делал? Нам бы оставалось только сосредоточиться на разработке удобного интерфейса формы, где что-то скрывается, показывается итд. Может быть вы хотели написать об этом, но забыли? Где у вас симбиоз йии и ангулара?
Вот печаль, не увидел.

И слава сатане что не увидели, это ж ад был бы. Для кодогенерации во фронтэнд мире есть штуки намного удобнее чем Gii который ориентирован исключительно на CRUD контроллеры Yii. Для ангуляра же выгоднее использовать форм билдеры вроде angular formly.


Ну и да, когда речь идет о нестандартном и нетипичном проекте как-то смешно немного Gii использовать.

Почему же ад, angular formly я не использовал, но получение от gii, который между прочем ориентирован не только на CRUD контроллеры Yii (в теории, опираясь на само направление кодогенерации), кода формы + ангуларовский контроллер — ИМХО, очень даже рай. А сможет ли angular formly забрать у модельки тип данных, или длину, или любой другой валидатор, например exist? Я думаю, что нет, Вы будете это руками писать, так или иначе. Я же имел в виду пропускать этот шаг, ведь это уже есть в модельке. Или я Вас не так понял?
А сможет ли angular formly забрать у модельки тип данных, или длину, или любой другой валидатор, например exist?

1) валидатор exists не нужен
2) если у вас строчка в базе напрямую проэцируется на объекты, оттуда проэцируется на ресурс API и оттуда на форму ангуляра… то может стоит задуматься о том что вам вообще бэкэнд на Yii не нужен? например взять firebase и не париться, покрывает где-то 70%-80% всех проектов связанных с API.

А это норм создавать модели для форм?)
как сделать говно? нужно взять одно говно и смешать с другим говном.

> Чтобы создать качественное и производительное Web-приложение,

на php фреймворке? серъезно?

> необходимо уделить должное внимание выбору платформы для разработки.

что тут выбирать? бери Go или phoenixframework и шуруй

> высокая нагрузка на сервис.

на php фреймворке? серъезно?

или высокая нагрузка от слова выское и не оптимальное потребление ресурсов? это да с PHP всегда пожалуйста
«Довольно низкий порог вхождения»

Очень ошибочное впечатление об Ангуляре, покрайне мере 1.* версии

Очень ошибочное впечатление об Ангуляре, покрайне мере 1.* версии

Ну хз, у меня для его использования хватило недели чтения доки в свое время (2012-ый год). Сейчас с angular1.5, компонентами, стайлгайдами и т.д. ситуация только улучшилась.

Странно, в первой версии как раз сложных вещей нет, другое дело вторая.
Начинать новый проект на Angular 1.x немного странно, с учетом того, что версия 2 принципиально другая и вся текущая разработка направлена именно на нее. Про Yii2 ничего не могу сказать, мне вообще непонятны люди пишущие на PHP.
с учетом того, что версия 2 принципиально другая и вся текущая разработка направлена именно на нее.

посмотрите внимательно на angular 1.5+ Некоторые фичи, такие как компоненты даже в 1.3+ доступны. То есть если брать 1.0 и 2.0 — различия конечно могут напугать. Но версии 1.0 уже 4 года.


Если вам интересно как выглядят проекты на современном ангуляре (то есть последние версии и последние подходы) рекомендую глянуть этот репозиторий: https://github.com/martinmicunda/employee-scheduling-ui

а мне непонятны люди, критикущие PHP, не аргументируя это

Ну это типа модно критиковать PHP без аргументации, просто "потому что". а то, что PHP — самый быстрый в мире интерпретируемый язык без JIT (который должен быть в 7.2 по планам) с одной из лучших объектных моделей — их не волнует.

Зачем вообще оставлять свои высеры в хабе о PHP, если на PHP не пишете?

Что бы происходил обмен опытом между разными комьюнити.


Например автор комментария вполне поделу выразил свое мнение относительно выбора версий фреймворка (субъективное прошу заметить). То есть все по делу и т.д. а вот вашы "высеры" несут исключительно деструктивный характер.

2016 год на дворе. jQuery?! Angular?! Где React? Где Webpack? Где Node.js?

Где React? Где Webpack? Где Node.js?

Остались в 2014-м.

AngularJS вроде как создавался для создания SPA, и последние сборщики собирают все в один js-файл, включая и темплейты. Это значительно ускоряет работу веб-приложения, а на сервере достаточно сделать API-интерфейс. В этом случае есть четкое разделение фронтенда и бекенда. Тогда использовать шаблонную систему Yii нет смысла. Полезность конструкторов форм Yii тоже под вопросом. А если большинство плюшек Yii не будут использоваться, то можно выбрать что-нибудь полегче.
У автора, как я понял, Angular используется не по назначению, соответственно, многие его плюсы не задействованы. Не нашел, почему такой «крупный нетипичный проект» будет быстрее или лучше обычного сайта.

Не используемые плюшки лишь занимают место на диске (пару мегабайт). На используемые плюшки они никакого влияния не оказывают.

Разрабатываю проект на AngularJS + backend. Долго думал и тестировал какой же выбрать backend. Поставил yii2 и оказалось головной болью, так как вся логика в базе данных, работа через pipeline-функции, все данные обрабатываются через процедуры, нет прямого доступа к таблицам.
В итоге остановился на Phalcon: phalconphp.com/ru. Действительно быстрый и удобный.
Пишу на 1.5.7 Angular, было страшно разрабатывать проект на Angular 2 Beta, решил завершить на ветке 1.х, а потом мигрировать на 2.х

Еще вначале года React не пользовался популярностью, а теперь с чего вдруг на него такая мода пошла?
Мигрировать с Angular 1 на Angular 2 === написать проект заново.

Абсолютно голословное утверждение.


Это больше зависит от того как написано приложение и каков уровень связанности с фреймворком. Нормальные приложения (то есть где логика не размазана по километровым контроллерам) портируются весьма просто. Особенно если проект начинался на актуальных версиях ангуляра.

Не буду с вами спорить, вы конечно же видели вот эту страницу: https://angular.io/docs/ts/latest/cookbook/a1-a2-quick-reference.html
При переходе всего лишь нужно исправить все темплейты — а это все ангуляровские директивы, биндинги (в старых версиях ангуляра, кстати, было, так же, как в ангуляре 2, то есть не нужно было писать vm.variable); прописать декораторы всем контроллерам, да и вообще значительно переделать все контроллеры. Добавить bootstrap. При этом ангуляр2 написан на TypeScript, и если ваш проект на js, то ангуляровский ts будет периодически напоминать о себе.
При переходе всего лишь нужно исправить все темплейты — а это все ангуляровские директивы

Это не так много на самом деле. Заменить ng-hide="$ctrl.someExpression" на [hidden]=someExpression выглядит не сильно сложно. Есть конечно и более интересные штуки вроде ngIf* но по большей части это может только стили чуть сломать если все на каскадирование было завязано.


прописать декораторы всем контроллерам

в моих проектах нет контроллеров, есть только компоненты. В последний раз контроллеры писал год назад.


прописать декораторы всем контроллерам

тип вместо ngApp? мне казалось серьезные дядьки и так его не используют. Ну и опять же это не сильно сложно. Особенно если пишешь проект с оглядкой на 2-ую версию как автор ветки.


и если ваш проект на js, то ангуляровский ts будет периодически напоминать о себе.

как именно? Можете привести примеры ибо это действительно было бы интересно. Я к сожалению на babel + angular2 не достаточно много писал что бы говорить что "никаких проблем".

как именно? Можете привести примеры ибо это действительно было бы интересно

Это вопрос удобства — на stackoverflow и прочих ресурсах все вопросы/ответы на TypeScript. Если нужно залезть в исходники AngularJS, то там тоже ts. В данный момент документация тоже в большинстве своем на ts. Если при этом сам пишешь на JS, то переключаться туда-сюда лично мне не комфортно. Поэтому, начав разрабатывать на второй версии, я выбрал именно TypeScript. А текущие проекты, которые написаны на первом ангуляре, переносить на второй не планирую в ближайшем будущем.

ну если брать JS + babel то психологически разница между TS версией уже не такая большая. Информация о типах опциональна и мы можем большую часть проекта писать как обычно (с плюшками вроде неявной установки пропертей в конструкторе, которая мне дико нравится), а важные вещи с прописанными типами.


Ну а в целом да, я тоже по итогу на TS пишу, по тем причинам которые вы описали. Но правда мне нравится, и я считаю это плюсом.

Не бывает волшебной кнопки, по нажатию которой проект мигрирует с минорной версии на мажорную. И не вижу смысла гнаться за последней версией, которая еще была в бета-версии. Можно просто облегчить себе переход, использую стайл-гайды.
Так, для ознакомления, посоветовал бы выбрать из
Todd Motto's: https://github.com/toddmotto/angularjs-styleguide
John Papa's: https://github.com/johnpapa/angularjs-styleguide
Minko Gechev's: https://github.com/mgechev/angularjs-style-guide
Сам пишу придерживаясь стиля John Papa.
Сейчас начинаем писать админки для rest сервисов, выбираем между angular 1 и angular 2. Насколько он production-ready? Начинали с ранних версий ангуляра, к тому моменту, как написали для себя достаточно компонентов за годы, он как-то успел устареть:). Большой ли профит от перехода на angular 2? Как бы он тоже не устарел через два месяца… Проходили это все в связке с bootstrap(css) :)
Насколько он production-ready?

Ну мы недавно небольшой проектик для пробы пера на нем написали — весьма неплохо вроде бы все. Все еще ощущается легкая нехватка библиотек но на данный момент почти все нужное есть.


к тому моменту, как написали для себя достаточно компонентов за годы, он как-то успел устареть:)

Не сказал бы что ангуляр устарел. Те подходы которые использовали устарели, но как бы на angular 1.5+ можно использовать все то что есть в ng2 в плане подходов. Особенно если писать с typescript всякими.


Большой ли профит от перехода на angular 2?

Профит от angular2 будет для реально больших приложений. Для админок профита лично мы не увидели. А вот там где нужно будет делать уже server-side пререндеринг второй будем брать уже второй ангуляр.

Выбирая между первым и вторым ангуляром, для небольшого проекта с админкой я выбрал Angular 1.5. Там есть все, что нужно, плюс я его дольше знаю, и разработка идет быстрее — считаю, что это основной профит. Но это для маленького проекта, про большой проект ничего сказать не могу.
Хотя нет, могу — когда несколько месяцев назад писал проект на Angular2, пару раз пришлось весь код перелопачивать и частично менять его из-за изменений в Angular. Тогда он был бетой, я был готов к этому. Сейчас он RC, вроде изменений должно быть по минимуму, но кто знает…
А что за логика в БД? Что за pipeline-функции? Какие процедуры?

Работал как с PhalconPHP, так и с Yii/Yii2. PhalconPHP проигрывает Yii2 в роли REST сервера. Phalcon можно конечно и подтянуть, но из коробки (да и в целом архитектура) Yii2 больше подходит для REST-сервиса.
весь рабочий процесс(электронный документооборот). Pipeline-функция, грубо, это функция, которая возвращает таблицу (BD oracle).
т.е. запрос вида
SELECT * FROM TABLE(users(ID))
Я не смогу использовать Active Record в таком случае.
В phalcon проще стартануть, но при одинаковых условиях, phalcon быстрее yii2, как по мне. Ничего лишнего больше не надо, я в Phalcon использую только микро-фреймворк.
Если честно, не приходилось работать с базой Oracle, поэтому не буду спорить на счёт функционирования Yii2 и этой бд, тут нам SamDark нужен. Но если вы используете Phalcon только как Micro и вас всё устраивает, то тогда всё хорошо и Phalcon действительно лучше подходит.

Увы, мне пришлось убежать с Phalcon на Yii2 именно в тот момент, когда мой проект стал перерастать в нечто большее, чем простой сайтик :)
А вы используете yii2 только как Rest?
Какие проблемы возникли, которые повлияли на решение о переходе на yii2?
Во первых, Yii2 имеет значительно большее сообщество, нежели Phalcon, а значит искать решения или готовые библиотеки будет гораздо проще.
Во вторых, у Yii2 более богатая библиотека helper'ов.
В третьих, у AR Yii2 есть поддержка realtions, запросов с Join и так далее. У Phalcon такого нет. У Yii2 же есть ->joinWith, который творит всю магию.
В четвёртых, у PhalconPHP при обновлении модели, сохраняются все поля. У Yii2 есть понятие «гразные атрибуты», которые и обновляются.
В пятых, у Yii2 есть отличный механизм поведений, внутри которых доступны все события модели.
В шестых, у Yii2 сервисы конфигурируются удобнее, чем у Phalcon (здесь речь про мержи массивов с описанием компонентов перед тем, как компонент будет реально создан). У Phalcon такое сделать сложнее.
В седьмых, у Yii2 есть функциональный встроенный механизм миграций. На Phalcon мне пришлось впиливать поддержку Phinx migrations, поскольку родной механизм «такой себе».
В восьмых, у Yii2 есть Rbac, как на базе файловой системы, так и в БД. У Phalcon, конечно, есть ACL, но у Yii2 это всё так классно вмешано в логику контроллеров через поведения проверки доступа.
В девятых, если тебе нужно понять, почему какой-то кусок фреймворка не работает или, что ещё хуже, тебе нужно его изменить, то в абсолютном большинстве случаев ты идёшь на github, смотришь код, видишь там private/final, плачешь, копируешь Zephir код и идёшь его портировать обратно на PHP в своём приложении. Я это высосал не из пальца, я писал тэгируемый кэш и я нашёл очень много тёмных мест внутри исходников Phalcon.

Сходу вспоминаются эти штуки. Вся вышеописанная критика актуальна для Phalcon 1.3.*. Что сейчас творится на 2.0.* я не знаю, но, емнип, новых фич они не добавляли, а просто переписали его на Zephir. Нет, всё вышеописанное не говорит, что мол «Phalcon ненужон», но всё же он больше мне видится для простых микросервисов, либо как основа для какой-то массивной наработки поверх него, которая решала бы большинство его же проблем.
Если так хочется (или необходимо) использовать такие специфичные вещи, то зачем брать фреймворк (yii2), основной элемент которого, такое не поддерживает?

Вполне можно написать модельки и из заполнение из базы в виде репозитория, внутри которого query builder.

Yii рассматривался как rest для angular, так как хотел изучить эти 2 фреймворка. А нет лучше методов изучения, как сразу практика.
Потом решил перенести все в бд, оставить angular и с чистого написать свой rest. Но время поджимало и на дворе 2016 год, бессмысленно писать с 0, решил использовать phalcon.
Yii как rest — ничего необычного.
Но перенос логики в БД — нетипичная задача. Как в принципе в разработке, так и для Yii. Особенно для Yii, где половина работы с БД завязана на ActiveRecord.
Кстати:
> все данные обрабатываются через процедуры, нет прямого доступа к таблицам
Есть удобные query и command. Вот только придётся работать с массивами. Неудобно. но не смертельно.
Или делать свою реализацию (Base)ActiveRecord, которая будет выполнять все операции с использованием view и процедур.

Если не секрет, что стало решающим в пользу переноса всего в БД?

Теоретически можно завести VIEW и его уже использовать в AR. Но вообще это очень специфичная задача, для которой AR как-то и не подходит...

Работал с одним проектом на Yii2 + Postgres, там тоже логика была в базе. Модели можно было генерировать из типов (которые CREATE TYPE). Неудобно конечно, приходится вручную писать сохранение/загрузку, и модель становится больше похожа на репозиторий. Но думаю, если унифицировано именовать функции в БД, то можно сделать общую базовую AR-модель с findBySql() для чтения и полностью переопределенными методами для записи.
Sign up to leave a comment.

Articles