Pull to refresh

Обзор решениий для ускорения разработки приложений на Yii Framework

image

Структура приложения – это одна из основных причин, по которой PHP программисты превращаются из “изобретателей колеса” в пользователей фреймворков. Строгие соглашения о структуре приложения и именовании позволяют нам избавиться от тонны кода, сделать рабочий процесс предсказуемым и объединить усилия команды для быстрого и качественного написания ценного бизнес функционала – без вечного рефакторинга роутеров, контроллеров и тд

Yii Framework имеет консольную команду для создания основного костяка приложения, который позволяет практически сразу начать работу над веб-приложением. Gii Модуль позволяет создавать каркассы классов моделей, контроллеров и универсальных CRUD интрерфейсов. Однако, если функциональность вашего приложения находится за пределами обычного вебсайта, — фреймворк сам по себе уже не имеет встроенных помощников для создания комплексной архитектуры.

И, хотя, все добротные схемы организационной структуры приложения описаны и хорошо известны (на самом деле, не так уж и “хорошо”), это не освобождает нас от шаблонного конструирования в новых проектах время от времени. Здесь приходит на помощь готовый скелет структуры приложения.


Давайте рассмотрим большую веб систему с: фронтэндом (вебсайт для обычного использования), бэкэндом (панель администратора для управления веб-приложением) и веб-сервисом API (чтобы разрешить мобильным приложениям, к примеру, взаимодействовать с вашим веб-приложением). Такая структура должна позволить иметь общее ядро с бизнес моделью, масштабировать приложение в будущем и физически разделять части приложения между различными серверами.

Для быстрого развертывания такой структуры приложения мы можем использовать открытые решения от компаний Clevertec, MobiDev или Herzogkommunikation. В основном, эти решения являются скелетами приложений, которые могут быть использованы во всех видах проектов, от небольших вебсайтов до больших систем, как описано выше (к счастью, Yii framework в любом случае не будет требовать много вспомогательного кода даже для небольшого проекта, который использует масштабируемую структуру).

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

Phundament

Ресурс размещения: http://phundament.com/
Разработчик: Herzogkommunikation

Ключевая особенность:
— основан на Composer

Плюсы:
— Намного больше, чем просто скелет приложения
— Используя Сomposer, вы можете установить CMS-подобное решение (управление пользователями, RBAC)
— Twitter bootstrap GUI
— Расширенная поддержка миграций баз данных

Минусы:
— Намного больше, чем просто скелет приложения
Да, это одно из преимуществ, однако для некоторых проектов это может быть наибольшим недостатком – в большинстве случаев вам просто не понадобится все это.

YiiBoilerplate

Ресурс размещения: https://github.com/clevertech/YiiBoilerplate
Разработчик: Clevertec

На мой взгляд, это одно из наилучших решений на сегодняшний день.
У него есть ряд связанных проектов, таких как YiiBackboneBoilerplate, чтобы обеспечить структуру веб сервиса для Backbone JS приложений и Yii-Booster, который интегрирует некоторый функционал YiiBootstrap с собственными модулями, как Grids и т. д. — благодаря сочетанию этих трех расширений вы получаете мощную основу практически для всех типов приложений.

Ключевая особенность:
— Совместимые функциональные дополнения
— Поддержка конфигурационный окружений

Плюсы:
— Очень хорошо структурирован и четко разделен
— Включена структура тестов Behat + Mink (BDD подход к тестированию)
— Общедоступные ресурсы ( JS, CSS) собраны в отдельном каталоге ( на мой взгляд, этот подход должен стать рекомендуемым в фреймворке)
— Минимум необходимых расширений в комплекте

Минусы:
— Постдеплойные действия обрабатываются кастомным php скриптом ( а это не так хорошо и недостаточно абстрактно, чтобы расширить/изменить)

Backvendor

Ресурс размещения: www.yiiframework.com//extension/backvendor
Разработчик: MobiDev

Ключевые особенности:
— Версионированный движок веб сервиса с автогенерацией документации

Плюсы:
— Использует Phing сценарий для деплоя
— Расширение страниц бэкэнда, которое автоматически управляет связями AR моделей и отображает связанные объекты (позволяют создавать базовый админ интерфейс с возможностью управлять этими взаимосвязями за очень короткое время)
— Расширяемая структура API для JSON веб сервиса

Минусы:
— Все компоненты тесно связаны
— Генератор скелета приложения выполнен в виде приложения Yii сам по себе, так что, если вы захотите изменить структуру генерируемого каркасса, это будет немного сложнее.

Выводы


На мой взгляд, пока еще не существует идеального решения и я уверен, что никогда не будет такого, которое подойдет всем:) YiiAppBoilerplate моей мечты еще не создан, но он должен быть структурирован так же, как и YiiBoilerplate, я должен иметь возможность расширить его с помощью менеджера пакетов как Phundament и я хотел бы некоторые расширения типа JSON веб сервис и отдельные расширения для страниц бэкэнда от Backvendor.
Будем надеяться, что как известно по слухам Yii2 будет иметь поддержку управления пакетами Composer, укомплектованные Twitter Bootstrap и различные генераторы скелетов приложений (для базовых и масштабных приложений) прямо из коробки — тогда, надеюсь, не будут нужны сторонние структурные фреймворки для Yii и будет достаточно собственных conposer.json в наших новых проектах.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.