Описание и идеология
Идеология
Отдельная экосистема небольших приложений их плагинов для совместной работы вместе с другими фреймворками и удобной интеграции дополнительного функционала. Фреймворк без сборок и необходимости конфигурации, работающий сразу после его загрузки. При создании использовался принцип: "Все свое, ношу с собой", это значит, что весь его функционал может быть собран в один файл и загружен на любой сайт.
Зачем писать отдельный фреймворк?
Есть много пакетов и отдельно написанных приложений, которые поставляют полезный функционал, имеют свою бизнес логику и иногда даже имеют свой отдельный веб интерфейс. В Laravel пакеты, в Symfony бандлы, в различных CMS плагины и дополнения.. У всех своя реализация маршрутизатора, событий, кеширования, подключения к БД, ACL и т.д, что делает невозможным быструю интеграцию сторонних приложений. Взять пакет, написанный для Laravel, и интегрировать его в другой фреймворк или CMS, в большинстве случаев будет проблематично, а иногда невозможно из-за зависимостей от фреймворка и конфликтов.
Самим разработчикам таких приложений приходится писать адаптацию под каждый фреймворк и CMS, что создает много проблем и не покрывает все известные экосистемы.
Основные проблемы при интеграции таких приложений в систему:
- Настраивать ACL
- Прокидывать необходимые скрипты админку и на фронт
- Создавать обработчики запросов (контроллеры) и структуру в бд
- Работать с файловой системой
- Делать сохранение настроек и конфигурации
Для каких приложений подходит фреймворк
- Построение API.
- Текстовые редакторы и их плагины с несколькими уровнями зависимости (плагин для плагина)
- Обработчики картинок и медиа файлов.
- Одностраничных приложений, посадочных страниц.
- Различных оптимизаторов, компрессоров и систем кеширования.
- Приложений для работы с файлами и базами данных.
- Форм обратной связи, мессенджеров, чат ботов.
- Независимых административных и аналитических инструментов.
- и другие микро приложения.....
Характеристики
Фреймворк состоит из отдельных пакетов - компонентов. Мы постарались не использовать зависимости , кроме PSR интерфейсов, весь функционал располагается в отдельных неймспейсах, включая функции хелперы. Для работы в режиме совместимости с другим функционалом, сделан режим симбиоза. Режим симбиоза позволяет использовать фреймворк рядом, перехватывать запросы, при минимальном времени отклика.
Ядро
- Не имеет зависимостей (кроме PSR интерфейсов).
- Малый вес - ничего лишнего, только минимальный функционал.
- Весь функционал в своих неймспейсах, включая вспомогательные функции.
- Контейнер PSR-11.
- Диспетчер Событий PSR-14.
- Кеш PSR-16 (Simple Cache).
- Логгер PSR-3
- Кешируемый Сервис контейнер.
- DI контейнер построен на базе контейнера Laravel.
- Поддержка многоуровневой системы контейнеров (Ядро <- Приложение <- Плагин <- Расширение плагина).
- Возможность расширять ядро через Бутстрапперы и провайдеры.
- Нет никаких консольных сборщиков - поставил и сразу работает.
- Удобная обертка для работы с файловой системой.
Веб Ядро
- Обработчик запросов PSR-15 (HTTP Server Request Handler)
- Мидлвары PSR-15 (HTTP Server Middleware) для Роутов.
- Для работы с запросами PSR-7 (HTTP Message)
- Быстрый обработка запроса (0.6-4 мс при сборке в одном файле или в режиме RoadRunner).
- Специальные мидлвары ядра для перехвата запросов до загрузки всего функционала(ответ за ~1 мс).
- Весь фреймворк можно поселить в нужном префиксе URL (например /symbiotic/*).
- Роутинг поселений - каждое приложение работает в своем префиксе.
- Единый контроль доступа для Admin роутов (ACL).
Приложения и пакеты
- Поддержка виртуальной файловой системы - статику нет необходимости вытаскивать в публичную папку (в планах есть мигратор статики публичную папкку).
- Отлаженный нейминг для удобного доступа к роутам и сервисам приложений.
- Шаблонизатор Blade(урезанный) c удобными функциями доступа к шаблонам, роутингу и сервисам приложения.
- Иерархический сервис контейнер - плагин для приложения наследует родительский DI контейнер и может использовать его сервисы.
- Система взаимодействия через события - можно подписаться на события любого приложения (в планах инкапсуляция (баблинг) событий приложений мимо ядра).
- Удобные события для вывода статики на страницы админки и фронта.
- Возможность расширять приложения через сервис провайдеры.
- Возможность расширять ядро через Бутстрапперы.
- Поддержка настроек для пакетов и приложений.