0

Товар успешно добавлен в корзину

Оформить заказ

Возможности для разработчиков

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

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

Например, так выглядит корневая структура директорий ReadyScript:

  • cache
  • core
    • rs //Фреймворк. Ядро сайта
    • smarty
    • system //Здесь находятся файлы, инициализирующие основные функции системы (autoload, session, exception handlers)
  • modules //Здесь должны находиться модули
    • main //Модуль Main
      • config //Здесь должны находиться конфигурационные классы модуля
      • controller //Контроллеры модуля Main
        • admin //Корневая папка для контроллеров административной части
        • front //Корневая папка для фронт контроллеров
        • block //Корневая папка для блочных контроллеров
      • model //Корневая папка для моделей
        • orm //Корневая папка для ORM объектов
        • ... //Здесь может быть создана произвольная структура данных
      • view //Корневая папка для шаблонов отображения
    • users
      • config
      • controller
      • model
      • view
    • ...
  • resource //Папка для общих ресурсов(js, img, css)
  • storage //Папка для пользовательских данных
  • templates //Папка для тем оформления
    • default //Тема оформления default
      • moduleview //Папка для перегрузки шаблонов модулей
        • main //Шаблоны в этой папке будут перегружать шаблоны модуля Main

Программный код в системе разделен на 2 составляющие ядро(фреймворк) и модули.

Фреймворк построен на основе PHP 7.1 и является объектно-ориентированным. Он содержит множество классов, решающих типовые задачи. В случае необходимости любой из классов может быть расширен с помощью механизмов наследования ООП. Такой подход позволяет максимально применить концепцию повторного использования кода.

Каждый класс в системе располагается в отдельном файле. Структура папок на пути к файлу с классом определяет его пространство имен (namespace), что позволяет системе быстро понять где искать тот или иной класс для автозагрузки.  

Ниже представлены некоторые концепции и компоненты, присутствующие в ReadyScript:

MVC – как и многие современные системы, ReadyScript применяет концепцию Model-View-Controller для разделения бизнес-логики и отображения.  Этот паттерн жестко заложен в архитектуре системы, что можно увидеть даже по структуре каталогов модуля:

  • modules
    • catalog
      • controller //Каталог контроллеров
      • model //Каталог моделей
      • view //Каталог отображений

Такая концепция позволяет удобно использовать единожды разработанную бизнес-логику(модели) в различных контроллерах и с различными отображениями.

Hooks – Система событий. Позволяет модулям подписываться на события и изменять стандартный ход выполнения различных операций. Данная возможность просто необходима в модульных системах, так как позволяет без изменений ядра расширять его функционал.

Cache – Система кэширования является важной составляющей ядра, и применяется для хранения заранее подготовленных данных с целью их быстрого извлечения при необходимости. Использование КЭШа способно значительно ускорить выполнение скриптов, и снизить нагрузку на сервер. Однако данные в КЭШе устаревают со временем и их нужно обновлять. Для разработчиков в ReadyScript доступны 4 способа сброса КЭШа:

  • по времени – через заданное время кэш будет автоматически обнуляться.
  • по тегам – кэш данные, привязанные к указанному тегу будут сброшены.
  • по изменению таблицы БД – любая операция INSERT, UPDATE, DELETE к таблице будет вызывать обнуление КЭШа, привязанного к этой таблице БД.
  • по классу(и методу) – можно вызвать обнуление КЭШа по классу и/или методу, данные которого были помещены в кэш.

ORM – В ReadyScript применяется уникальная ORM система, созданная по паттерну ActiveRecord. Она позволяет разработчику полностью абстрагироваться от базы данных и работать только с объектами PHP.  Каждый ORM объект имплементирует интерфейс ArrayAccess, Iterator, что позволяет работать с объектом как с массивом. ORM-объекты ReadyScript способны автоматически приводить в соответствие структуру базу данных, а также генерировать HTML формы.

Например:

  1. $product = new Product();  
  2. $product[‘title’] = ‘Самолет’;  
  3. $product[‘description’] = ‘Модель: A380’;  
  4. $product->description = ‘Модель: A380’; //Допустима и такая запись  
  5. $product->insert();  

Результатом данной операции будет вызов SQL запроса:

  1. INSERT INTO `database`.`productTable`(title, description) VALUES('Самолет''Модель: A380');  

Для организации выборок объектов существует класс Request, который позволяет произвести выборку объектов по любым условиям. Ниже представлен простейший пример выборки объектов с названием ‘Самолет’.

  1. $products = \RS\Orm\Request::make()  
  2. ->select(‘*’)  
  3. ->from(new Product())  
  4. ->where(array(  
  5.     ‘title’ => ‘Самолет’  
  6. ))->objects();  

Результатом данной операции будет выполненный запрос:

  1. SELECT * FROM `database`.`productTable` WHERE `title` = 'Самолет';  

и сформированный массив объектов Product с названием ‘Самолет’ в переменной $products

Routing  -  мы отказались от написания конкретных URL в шаблонах. Теперь любой модуль может точно направить пользователя на нужную страницу.

View Helpers  - мы сделали вспомогательные классы для конструирования стандартных интерфейсов административной панели. Используя эти классы можно в считанные минуты собрать любой интерфейс, связанный с CRUD действиями, всевозможными фильтрами, и кнопками.

Css/Js – мы используем централизованное управление стилями и скриптами, подключаемыми на отдельных страницах. И даже более того, система корректно отрабатывает подключение скриптов и стилей в ajax - режиме загрузки страниц.

Микроформаты – у нас уже есть готовые обработчики различных ситуаций в виде jquery плагинов для административной панели. Наделяйте ваш шаблон поведением, просто добавляя CSS-классы в разметке HTML.

Модульность – чтобы создать новый модуль – не нужно его где-то прописывать, включать в какие-либо списки. Просто создайте каталог с модулем в папке modules и система сама распознает его. Включенный модуль может подписываться на все события системы и вносить корректировки в поведение.

Smarty 3 – Для рендеринга шаблонов используется самый популярный в мире шаблонизатор, который значительно улучшает читаемость шаблонов и имеет огромное количество возможностей, включая и наследование шаблонов.

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

  1. $singlePhoto = new Preset\SinglePhoto(array(  
  2.     'linkPresetId' => 0,  
  3.     'linkForeignField' => 'image',  
  4.     'title' => 'Изображение'  
  5. ));  

будет равносильно вызову:

  1. $singlePhoto = new Preset\SinglePhoto();  
  2. $singlePhoto->setLinkPresetId(0);  
  3. $singlePhoto->setLinkForeignField (‘image’);  
  4. $singlePhoto->setTitle(‘Изображение’);  

т.е. просмотрев методы, начинающиеся с set или add в классе сразу можно понять, как можно кратко инициализировать объект через конструктор и посмотрев подпись PHPDoc к методу  в современных IDE сразу можно понять данные какого типа ожидаются в значениях массива.

Расширение поведения (behavior) – добавляйте собственные методы к ORM объектам из других модулей. Это удобно, когда нужно добавить возможности к существующим объектам в системе, например, чтобы воспользоваться этим в шаблонах.

Удобная система изображений – залог быстрого подключения шаблонов. При загрузке фото, система сохраняет "крупное изображение". И в любом участке кода или шаблона имеется возможность сгенерировать ссылку на фото нужного размера и типа масштабирования. Непосредственно создание уменьшенного изображения будет происходить единожды во время запроса картинки браузером. Ссылка на изображение содержит в себе цифровую подпись, что не позволит злоумышленнику "положить" сервер запросами на масштабирование. Картинки на сервере складываются в удобную древовидную структуру, что помогает избежать большого скопления файлов в одной директории.

Фреймворк для внешних API – в настоящее время интернет-магазин должен активно взаимодействовать с любым сторонним ПО, мобильными и Desktop приложениями. В ReadyScript предусмотрено все, чтобы в кратчайшие сроки добавить собственные методы API. Также есть все необходимые инструменты для отладки запросов к API, автоматического построения документации, разграничения прав.

Готовая подсистема Email, SMS, ПК уведомлений – создавайте класс уведомления и наделяйте его поведением, имплементируя интерфейс Email, SMS или Desktop уведомления(можно все вместе). Абстрагируйтесь от задачи доставки этих уведомлений, ReadyScript позаботится об этом сам.

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