Фреймворк Моя Фантазия - описание и системные требования

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

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

Данный проект - Российский и сделан с уклоном на простоту работы с ним, с минимальным набором зависимостей от других библиотек учитывая опыт работы с западными системами. На данном проекте сделан этот сайт с его сервисами и проекты которые на нем опубликованы

В настоящее время на данном фреймворке ведется разработка проекта для внесения онлайн в игры - подробнее

Краткий обзор:1 Легкий в освоении (фреймворк состоит из ряда фаилов в папке core/)


2 Архитектура основана на сервисах (независимые приложения в папке app/) легко переводимые на микросервисы (расположенные физически на разных серверах) 3 MVC (разделение кода и представления) паттерн 4 Передерживание принципа SOLID 5 Cледование стандартам PSR 6 Современные шаблоны проектирования (фабрика, синглтон, декоратор, адаптер и тп) 7 Скорость работы (нагрузочное тестирование показало в x30 более быстрый результат чем на фреймворках Symfony/Laravel) 8 Свой собственная ORM/DBAL (гибридный принцип Database First и Object First основанный не на аннотациях классов, а на ключах БД и именовании полей), есть плагин для работы с XML 9 При разработке используются практики современных фреймворков (Symphone, Laravel, Yii) 10 Минимум зависимостей: проект использует лишь то, что реально нужно (легко отслеживать просадки в скорости, потребление памяти, особенно в CLI режиме с многопоточными приложениями) 11 Для администрирования игрового мира используется веб сервис (Аналог CMS для сайтов и CRM для взаимодействия с пользователями)



Используемые технологии:


Общее описание папок:

app/ - список доступных приложений (уже стоять основные)
  ....
    config/         - содержит фаил int.php с доступами к бд а так же cli-config.php  для работы через консоль с Doctrine
    controller/     - контроллер содержащий методы (action), работа с шаблонизатором доступна через $this->view, а с GET, POST данными через $this->"название переменной", наследуются от выбранного папки /core/Controller
    entity/         - сущности что наследуются от core/Loader.php (во многом заменят обращение к моделям из папки ./model)
    model/          - модели приложения (одноименно с названием контроллера подгружаются автоматически и доступны в контроллера через $this->model) наследуются от core/Model.php
    templates/      - персональные шаблоны дизайна сервиса html (используется шаблонизатор Smarty) и оригиналы CSS, JS и изображения дизайна
    label.png       - изображение сервиса в админ панели
bin/                - папка точки входа консольных команд (для работы с Cron, Doctrine, и вспомогательными возможностями)   
core/               - фаилы фреймворка
    Controller/     - фаилы базовых (от которых происходит наследование php extend) контроллеров 
    Database/       - облегченная версия DBAL наподобие Doctrine
    Doctrine/       - фаилы для ORM Doctrine 
    Cli.php         - класс для работы с консольными и Cron задачами
    Helper.php      - класс со вспомогательными функциями
    Loader.php      - orm наподобие Doctrine, но в отличии от него имеет встроенные методы для работы с бд и структуру БД понимает не с Аннотаций, а по названиям полей и запроса ее в БД
    Model.php       - базовая (родительская) модель 
public              - публичная папка для настройки в VirtualHost (доступ из вне есть только в нее)
    app/            - папка содержащие в себе под папки с символические ссылками на CSS, JS каждого из сервисов 
    data/           - контент приложения что закачивается движком (метод upload) сохраняется туда
    theme/          - символические ссылки на общие CSS, JS 
    index.php       - точка входа в приложения с WEB
theme/              - шаблоны дизайна и оригиналы CSS, JS и изображений для дизайна
    default/        - когда установлена тема по умолчанию - используются фаилы из данный папки (кастомизация CRM создает свою папку с темами)
temp/               - временные фаилы , в частности кеш страниц Smarty и логи
vendor/             - сторонние библиотеки, появится когда в папке проекта выполнится "composer update" (обязательно)
bootstrap.php       - единый фаил для Cli/Web приложений (его загружает composer перед началом работы, находятся общие константы)
blacklist           - фаил игнорированными папками opcache (требуется перезапуск php при изменении)
composer.json       - фаил с зависимостями Composer (в нем же указаны какие расширения php и версия необходимы)
preload.php         - фаил opcache
.gitmodules         - в нем уже прописано, что в папку app/ необходимо добавить зависимые репозитории (Авторизацию, CI/CD, Справку)

На базе данного каркаса было успешно сделано множество приложений (сервис контейнеров) как для моих личных проектов (онлайн игры) так и для компаний в которых было необходимо в сжатые сроки разработать прототипы приложений MVP (CMS, CRM, ERP ...)

Результат нагрузочного тестирования в мс. (SoapUI, 50 потоков, 5 секунд, кеш отключен) на страницу 404 (параметры php fpm, сервера в данном случае не важны тк производится сравнительный анализ при одинаковых условиях):

Laravel 8 : min 266 max 1730 avg 1077

Symfony 5 : min 574 max 4400 avg 2571

Моя Фантазия : min 7 max 45 avg 10