» » Релиз FFCMS 3.0.0 — новая переработанная система

 

Релиз FFCMS 3.0.0 — новая переработанная система

Автор: admin от 17-01-2017, 19:25, посмотрело: 361

Релиз FFCMS 3.0.0 — новая переработанная система Доброго времени суток обитатель habrahabr, сегодня я хочу тебе рассказать о новом релизе ffcms — 3.0.0 и кратко осветить кардинальные изменения, которые претерпела система с момента предыдущего релиза — 2.0.4.

Система сохранила бесплатную модель распространения и открытый исходный код (MIT), но исходный код был полностью переписан под MVC архитектуру и автозагрузку PSR-0. Многие «велосипеды» были убраны из системы, а их место заняли популярные компоненты: symfony http foundation, laravel eloquent и многие другие.


Переработка архитектуры системы


Обсуждая 2ую версию системы многие пользователи habrahabr советовали существенно переработать систему с учетом современных тенденций: добавить менеджер зависимостей и версий composer, ввести устоявшуюся MVC архитектуру и привести код к единому PSR-1/2 стилю. Код 2ой версии действительно имел достаточно низкое качество и об него можно было сломать ногу (а то и обе). Так же было отмечено, что модель разработки расширений 2ой версии является очень запутанной и избыточной, а вместе с синтаксисом api ядра у некоторых пользователей это вызывало душевную боль.

Внедрить современные инструменты и принципы разработки приложений было просто необходимо, однако переписывать существующий код было практически нереально — поэтому было принято решение переработать архитектуру системы «с нуля».

Система была разделена на несколько функциональных частей: базовая структура, ядро, консоль. Для каждой части был создан репозиторий, настроен composer и проект был опубликован на packagist. Все части связываются при помощи зависимостей в composer.json базового компонента.

Отказ от велосипедов


За последние годы разработки приложений я познакомился с большинством популярных фреймворков, такими как symfony, laravel, yii и codeigniter. Большинство «идей взаимодействий», которые я пытался самостоятельно реализовать в своей CMS, как не странно, уже были реализованы в популярных фреймворках — где то они монструозно сложны, где то — слишком просты и недостаточно функциональны. Многие из них мне понравились и я использую их по сей день, внедрив в ffcms.

Итак, следующие собственные части «велосипеда» были заменены на уже устоявшиеся популярные компоненты:


  • Работа с сетью (Networking): symfony http foundation

  • Работа с базой данных (DB manager): laravel eloquent

  • Безопасность HTML кода: HTML purifier

  • Работа с консолью: symfony console

  • Ядро кеширования (Caching): php fast cache

  • Отладка (Debugging): debugBar

  • Работа с почтой (Mailer): swiftmailer

  • oAuth 2.0 авторизация: hybridauth


Для некоторых из используемых компонентов были написаны «потомки», расширяющие или упрощающие функциональные возможности компонента для нужд системы. Использование данных компонентов позволило достаточно упростить базовое ядро системы и снизить порог вхождения для других разработчиков.

Производительность и совместимость


А не ввести ли нам поддержку php-5.2 и не юзнуть ли polyfill? Нет, нет и еще раз нет. Сейчас, на волне выхода php 7.1 и движения к deprecated 5.5 нет абсолютно никакого смысла поддерживать устаревшие версии php. Соблазн использовать polyfill, конечно, велик, но и от него можно отказаться дабы не усложнять и без того непростую систему.

FFCMS 3 будет работать на любом интерпретаторе php начиная с версии 5.5, в связке nginx — php-fpm, apache2 — php или любыми другими связками (при условии переписания правил перезаписи uri).

Производительность системы существенно не пострадала, хотя расход ресурсов стал несколько большим, чем во 2ой версии (оно и не мудрено), но все же до уровня bitrix дотянуть не удалось. Загрузка страницы все так же < 0.1сек, потребление памяти — < 7mb (для php 5.6 без opcache). Последний performance тест можно найти на google.docs вместе с тестовым контейнером под virtualbox.

Шаблонизация (или голый php?)


В данном споре бойцы сломали немало мечей, но единого мнения в вопросе нет. Многие считают, что самого синтаксиса php вполне достаточно для шаблонизации, а некоторые без twig и blade не видят своей жизни. Во 2ой версии системы использовался twig, но мной было принято решение ограничиться классическим php синтаксисом для генерации html кода в представлениях.


С UI осталось все по прежнему — jquery & bootstrap вполне проверенная временем связка.

БД, запросы и ActiveRecords


Для взаимодействия с базой данных в рамках PHP существует множество различных путей. Кто то работает с голым PDO, кто то с Doctrine и QueryBuilder'ами. В FFCMS используется библиотека laravel eloquent, которая позволяет взаимодействовать с базой данных по средствам сборщика запросов (Query builder) а так же при помощи подхода ActiveRecords.

ActiveRecords очень удобны для работы с БД и существенно упрощает и сокращает синтаксис запросов. Конечно, это не полноценный ORM уровня Doctrine, однако для целей CMS его вполне достаточно.

Миграции


Без миграций и их дальнейшего «деплоя» сейчас никуда. Нет, есть конечно же люди использующие mysqldump/pg_dump но мы не будем следовать этим путем. В ffcms 3 присутствует стандартная реализация миграций — классы с 3мя методами up(), seed() и down(), возможность создания, применения и отката миграций. Стандартные миграции хранятся в /Private/Migrations, но при помощи MigrationsManager могут быть имплементированы миграции из любых директорий.

Отладка


Для удобства быстрой отладки и профилирования запросов в ffcms встроен функционал phpdebugbar. Данный механизм позволяет выполнять отладку «на скорую руку», когда нет возможности или времени на подключение xdebug/zenddebug. Отладчик выглядит в виде панели и доступен для включения в настройках админ панели.


Тестирование


Тестирование работоспособности продукта вручную не является тенденцией современной разработки. Для целей автоматического тестирования кода системы и UI была внедрена система автоматических тестов — codeception, которая сочетает в себе стандартное unit-тестирование и acceptance тестирование интерфейсов.

Тесты можно запустить из корня при помощи команды codecept run, предварительно запустив selenium с драйвером для chrome или другого браузера. Так же необходимо отредактировать конфиг тестового окружения (/tests/acceptance.suite.yml) под вашу прослойку. Для настройки тестов есть небольшой документ с инструкциями к применению (документ не был изначально предназначен для «всех глаз», уж простите).


Расширения


В виду наличия PSR-0 автозагрузки система расширений была пересмотрена. Сейчас все расширения разделены на 2 типа — приложения и виджеты, первые — занимают определенный корневой URI в зависимости от контроллера и при помощи actions обрабатывают те или иные запросы; вторые — предназначены для отображения в каком-либо месте представлений путем прямого обращения к классу виджета.

Кроме того, весь набор «реализаций» может быть завернут в один пакет и при помощи git-а и composer-а соблюдая стандарт автозагрузки может распространятся как самодостаточная реализация. Ярким примером является реализация форума или демо-пакет.

Что ж, мой рассказ достаточно затянулся, но пожалуй в одну статью все уместить невозможно. Буду рад ответить на ваши вопросы и выслушать ваши пожелания.

-> Официальный сайт: ffcms.org (зеркало: ffcms.ru)
-> Проект на github: phpffcms

Документация администратора и разработчика: doc.ffcms.ru (в процессе доработки).

Источник: Хабрахабр

Категория: Программирование

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

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *