Фреймворк

Содержание...

Как в большинстве современных фреймворков, ядро Вебасиста реализовано в соответствии с принципом проектирования MVC («модель–представление–контроллер»). Принцип MVC подразумевает разделение логики приложения на три слабо связанных составляющих (слоя):

  • слой работы с данными (модель)
  • cлой представления
  • слой бизнес-логики (контроллер) — прием/валидация/обработка данных, полученных от пользователя, получение данных от модели, их подготовка и передача в представление для отображения в браузере пользователя

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

Процесс обработки HTTP-запросов

  1. Запрос поступает на обработку в скрипт-диспетчер.
  2. Ядро фреймворка выполняет анализ запрашиваемого URL.
  3. Система маршрутизации определяет, какое приложение должно запуститься и какую операцию это приложение должно выполнить.
  4. Для соответствующей операции определяется соответствующий контроллер, которому передается управление.
  5. Контроллер выполняет необходимую бизнес-логику, при необходимости обращаясь к данным приложения через классы модели.
  6. Для формирования кода веб-страницы контроллер вызывает код одного или нескольких последовательных экшенов.
  7. Для формирования HTML-кода каждый экшен передаёт полученные данные в шаблонизатор.
  8. Шаблонизатор на основе соответствующих шаблонов формирует код веб-страницы с использованием полученных данных.

Взаимодействие с базой данных

Техническая реализация взаимодействия с базой данных разделяется на два уровня: системный и прикладной.

Системный уровень

Системный уровень отвечает непосредственно за установление и поддержание соединений (пула соединений) к конкретной базе данных, отправку SQL-запросов и получение результатов от СУБД. Его работа зависит от типа сервера баз данных, поэтому для каждой СУБД требуется своя реализация этого слоя в виде плагинов-адаптеров. В текущей версии фреймворка имеется адаптер только для MySQL.

Прикладной уровень

Прикладной уровень абстрагирован от особенностей конкретной СУБД и технически может не зависеть от ее вида. Иными словами, код приложения может быть не привязан, например, именно к MySQL, а одинаково успешно выполняться с использованием различных СУБД. В таких случаях обязательным требованием является наличие соответствующего адаптера.

В состав фреймворка входит набор инструментов для взаимодействия с базой данных без составления SQL-запросов вручную в исходном коде приложения. Это позволяет приложению абстрагироваться от особенностей конкретной СУБД. Вместо использования SQL-запросов, приложение может вызывать соответствующие методы модели, например, «получить экземпляр с заданным значением ключа», «сохранить экземпляр объекта»,«получить список объектов» и т. п.

Контроллеры и экшены

Слой контроллера MVC во фреймворке Вебасист разделен на два более тонких слоя: контроллеры и экшены (в действительности к этом слою также относятся скрипт-диспетчер и система маршрутизации, но они не влияют на процесс прикладной разработки приложений).

Контро́ллер — это часть приложения, реализующая логику обработки запросов. Именно здесь определяется, из каких блоков состоит веб-страница, формируемая в ответ на запрос пользователя. В сложных приложениях для большей читаемости кода разумно разбивать логику генерации страницы на несколько частей. Каждая такая часть (например, генерация отдельного информационного блока на странице) называется экшеном.

Экшен — это часть приложения, отвечающая за генерацию фрагмента HTML-кода. Это может быть как код всей страницы, так и код отдельного информационного блока на странице. Экшен всегда вызывается из кода контроллера. При обработке запроса контроллер определяет, какие экшены необходимо вызвать для генерации страницы, и последовательно их вызывает. В распространенном случае, когда на странице есть только один динамический блок (результат работы какого-то одного экшена), задача контроллера сводится вызову единственного имеющегося экшена. Во фреймворке предусмотрен контроллер по умолчанию, который отрабатывает, если специализированный контроллер для обработки запроса не был найден, но класс экшена, который соответствует инструкции, полученной от системы маршрутизации, существует.

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

Шаблоны страниц

С каждым экшеном связан шаблон для формирования HTML-кода страницы. Для реализации слоя представления фреймворк Вебасист по умолчанию использует шаблонизатор Smarty. Однако требование использования Smarty не является жестким. Существует возможность подключать другие шаблонизаторы или даже использовать в качестве шаблонов чистый PHP-код. Для подключения альтернативного шаблонизатора достаточно создать класс-адаптер и внести его в системный конфигурационный файл.

Приложения

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

Таблицы приложения в базе данных снабжаются уникальным префиксом, что позволяет избежать конфликта имен. Список установленных приложений содержится в системном конфигурационном файле wa-config/apps.php.

Пользователи, права, авторизация, бекенд и фронтенд

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

Аутентификация и проверка прав доступа пользователя являются частью обработки любого HTTP-запроса. Эти операции выполняются автоматически на системном уровне и не требуют дополнительных действий от разработчика прикладного приложения.

Интерфейс любого приложения Вебасист состоит из двух основных частей — бекенда и фронтенда.

Беке́нд предназначен для использования внутри организации, которой принадлежат установленные скрипты. Доступ в бекенд имеют только авторизованные пользователи. Здесь обычно располагаются инструменты управления данными.

Фронте́нд предназначен для использования клиентами компании, посетителями сайта и другими сторонними лицами. Это та часть приложения, которая публикуется на сайте и может быть доступна без авторизации. В рамках фронтенда могут существовать и защищенные паролем личные кабинеты посетителей сайта (однако автоматически доступ в бекенд доступ посетителям сайта в этом случае не предоставляется). Контроль доступа к фронтенду приложения осуществляется самим приложением и на системном уровне автоматически не регулируется. Разделение приложения на бекенд и фронтенд не является обязательным. Например, у приложения Стикеры, входящего в комплект поставки фреймворка, есть только бекенд.