Описание и идеология

Идеология

Отдельная экосистема небольших приложений их плагинов для совместной работы вместе с другими фреймворками и удобной интеграции дополнительного функционала. Фреймворк без сборок и необходимости конфигурации, работающий сразу после его загрузки. При создании использовался принцип: "Все свое, ношу с собой", это значит, что весь его функционал может быть собран в один файл и загружен на любой сайт.

Зачем писать отдельный фреймворк?

Есть много пакетов и отдельно написанных приложений, которые поставляют полезный функционал, имеют свою бизнес логику и иногда даже имеют свой отдельный веб интерфейс. В 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 контейнер и может использовать его сервисы.
  • Система взаимодействия через события - можно подписаться на события любого приложения (в планах инкапсуляция (баблинг) событий приложений мимо ядра).
  • Удобные события для вывода статики на страницы админки и фронта.
  • Возможность расширять приложения через сервис провайдеры.
  • Возможность расширять ядро через Бутстрапперы.
  • Поддержка настроек для пакетов и приложений.