Reuniko
Новичок
Здравствуйте,
представляю вашему вниманию BlackFox.
У вас никогда не возникало ощущение того что PHP-фреймворки (далее - движки) написаны как-то странно, коряво, шизофренично (несколькими не согласными друг с другом людьми) и что они чаще мешают своими стандартами, чем помогают функционалом? Я повидал многие из них, живу с этим ощущением вот уже больше семи лет и пилю свой движок потихоньку.
---
Вот например для работы с базой данных в Laravel используется Eloquent ORM (паттерн Active Table) с конструктором запросов. Конструктор запросов является ни чем иным как полной копией языка запросов SQL, реализованным в виде обертки на PHP. Да, он позволяет "легко и быстро" мигрировать с одной базы данных на другую, но как часто вы это делаете? А для того чтобы добавить колонку в таблицу, необходимо создать миграцию. Для того чтобы удалить - миграция. Для того чтобы переименовать или изменить - снова миграция. И все эти миграции необходимо держать в уме при релизах.
BlackFox использует иной подход. Отнаследовав от класса SCRUD вы создаете свою таблицу, описывая ее поля в виде структурного массива. Когда требуется добавить\изменить\удалить — просто запускается метод Synchronize(), который ищет разницу между вашим описанием и реальными колонками в базе данных и эту разницу нивелирует. А метод поиска информации Search() так вообще конфетка, он принимает на вход массив фильтров, переданных напрямую из формы, сам автоматически эскейпает все принимаемые данные, да еще и выдает отэскейпанные данные на выходе, чтобы ваша голова не болела при составлении очередного отображения.
---
Или вот например в Yii контролеры и отображения разнесены по разным директориям, как будто некоторые отображения могут быть использованы более чем одним контроллером. А действие контроллера вынужденно возвращать готовый отрендеренный html, что не позволяет элегантно переиспользовать его там где нужен точно такой же ответ, но в формате json, xml или ajax.
BlackFox использует иной подход. Контроллеры и отображения объединены в единую структуру, которой управляет класс-наследник от Unit. Все публичные методы этого класса являются действиями и возвращают массив данных, подключаемых к отображению. А пользователю предоставляется возможность самому решать в каком формате он хочет получить ответ. Но самое вкусное тут это возможность наследования контроллеров вместе с отображением: если у отнаследованного контроллера отсутствует отображение, то будет подключено отображение родителя (или родителя родителя...).
---
Реализация роутинга во многих движках лично у меня вызывает культурный шок. Если все роуты для сайта описываются в одном файле, то становится невозможно вести разные разделы сайта в разных репозиториях, плюс возникает дополнительная нагрузка (обработка неиспользуемых правил роутинга).
В BlackFox вы регистрируете в конфигурации все папки, являющиеся виртуальными корнями (http://blackfox.reuniko.com/learn/basics/root.php), а затем создаете в них привычную структуру из папок и файлов, как в старом добром нативном PHP. А если возникает потребность в ловле запросов на несуществующие файлы\папки, то создаете в соответствующем разделе файл .router.php, на который такие запросы перенаправляются движком. В файле .router.php можно описать роутинг любой сложности.
---
Движок полностью готов к разработке реально сложных проектов, на текущий момент на нем уже создано несколько реально работающих боевых некоммерческих проектов. Однако документация все еще сырая, поэтому я был бы крайне признателен тем первым людям, кто бы ее посмотрел и дал мне фидбек на темы: что и где не понятно, чего не хватает.
Благодарю за внимание =)
представляю вашему вниманию BlackFox.
У вас никогда не возникало ощущение того что PHP-фреймворки (далее - движки) написаны как-то странно, коряво, шизофренично (несколькими не согласными друг с другом людьми) и что они чаще мешают своими стандартами, чем помогают функционалом? Я повидал многие из них, живу с этим ощущением вот уже больше семи лет и пилю свой движок потихоньку.
---
Вот например для работы с базой данных в Laravel используется Eloquent ORM (паттерн Active Table) с конструктором запросов. Конструктор запросов является ни чем иным как полной копией языка запросов SQL, реализованным в виде обертки на PHP. Да, он позволяет "легко и быстро" мигрировать с одной базы данных на другую, но как часто вы это делаете? А для того чтобы добавить колонку в таблицу, необходимо создать миграцию. Для того чтобы удалить - миграция. Для того чтобы переименовать или изменить - снова миграция. И все эти миграции необходимо держать в уме при релизах.
BlackFox использует иной подход. Отнаследовав от класса SCRUD вы создаете свою таблицу, описывая ее поля в виде структурного массива. Когда требуется добавить\изменить\удалить — просто запускается метод Synchronize(), который ищет разницу между вашим описанием и реальными колонками в базе данных и эту разницу нивелирует. А метод поиска информации Search() так вообще конфетка, он принимает на вход массив фильтров, переданных напрямую из формы, сам автоматически эскейпает все принимаемые данные, да еще и выдает отэскейпанные данные на выходе, чтобы ваша голова не болела при составлении очередного отображения.
---
Или вот например в Yii контролеры и отображения разнесены по разным директориям, как будто некоторые отображения могут быть использованы более чем одним контроллером. А действие контроллера вынужденно возвращать готовый отрендеренный html, что не позволяет элегантно переиспользовать его там где нужен точно такой же ответ, но в формате json, xml или ajax.
BlackFox использует иной подход. Контроллеры и отображения объединены в единую структуру, которой управляет класс-наследник от Unit. Все публичные методы этого класса являются действиями и возвращают массив данных, подключаемых к отображению. А пользователю предоставляется возможность самому решать в каком формате он хочет получить ответ. Но самое вкусное тут это возможность наследования контроллеров вместе с отображением: если у отнаследованного контроллера отсутствует отображение, то будет подключено отображение родителя (или родителя родителя...).
---
Реализация роутинга во многих движках лично у меня вызывает культурный шок. Если все роуты для сайта описываются в одном файле, то становится невозможно вести разные разделы сайта в разных репозиториях, плюс возникает дополнительная нагрузка (обработка неиспользуемых правил роутинга).
В BlackFox вы регистрируете в конфигурации все папки, являющиеся виртуальными корнями (http://blackfox.reuniko.com/learn/basics/root.php), а затем создаете в них привычную структуру из папок и файлов, как в старом добром нативном PHP. А если возникает потребность в ловле запросов на несуществующие файлы\папки, то создаете в соответствующем разделе файл .router.php, на который такие запросы перенаправляются движком. В файле .router.php можно описать роутинг любой сложности.
---
Движок полностью готов к разработке реально сложных проектов, на текущий момент на нем уже создано несколько реально работающих боевых некоммерческих проектов. Однако документация все еще сырая, поэтому я был бы крайне признателен тем первым людям, кто бы ее посмотрел и дал мне фидбек на темы: что и где не понятно, чего не хватает.
Благодарю за внимание =)
Последнее редактирование: