Главная | Язык | Фреймворк | Это Не | Пример |
![]() ![]() ![]() ![]() ![]() |
Компоненты веб-апликации являются годными для повторного использования модулями слоя презентации и следуют парадигме MVC. Таким образом, каждая компонента включает свой собственный Контроллер, свой собственный Вью, и состояние своей Модели.
Использование компоненты для построения страницы или другой компоненты так же просто как использование HTML тага, и не требует никакой дополнительной конфигурации. Во время исполнения фреймворк заботится о посылке информации из параметров запроса к инстансам соответствующих компонент, и назад от инстансов компонент в response посылаемый клиенту. Разработчики не заботятся о присвоении идентификаторов компонентам.
По умолчанию фреймворк хранит состояние каждей компоненты до конца сессии. Это поведение не зависит от порядка показа страниц или от видимости компонент на странице.
Компонента может быть использована на странице (или внутри вмещающей ее компоненты) более чем единожды. Для каждого использования фреймворк должен поддерживать независимое состояние. Это верно и для компонент использованных внутри цикла. Компонента может быть объявлена как разделяемая между страницами. В таком случае лишь идин инстанс будет создан фреймворком для всех Вью этой компоненты.
Во время фазы Вью компонента/страница может передавать информацию содержимой компоненте с помощью параметров виджета. Во время фазы Контроллера API фреймворка должен поддерживать правильно упорядоченную коммуникацию между компонентой и содержащей компонентой/страницей. Страница или содержащая компонента не обязана ничего знать заранее об используемой компоненте.
Заметьте, что разработчик сайта работает только внутри зеленой области. Все остальное уже имплементировано фреймворком. Таким образом никакого дополнительного программирования или конфигурации для использования компонент не требуется.
Рассмотрим гипотетическую страницу PageName. Вью этой страницы закодирован внутри файла PageName.page на языке HybridJava. Каждая страница имеет соответствующий класс состояния страницы PageName_PS. Фреймворк хранит инстансы классов состояния страниц в сессии, так что все члены данные инстанса класса состояния страницы живут до смерти сессии. Метод $handle класса PageName_PS вызывается фреймворком когда приходит HTTP запрос предназначенный для этой страницы.
Компилятор с HybridJava интроспектирует класс состояния страницы, разбирает файл вью страницы и генерирует класс PageName_P (класс презентации). Этот сгенерированный класс содержит метод $render, который, будучи исполняем фреймворком, предоставляет отсылаемый клиенту HTML вывод. Класс презентации генерируется потомком класса состояния страницы, так что все не-private члены и методы последнего напрямую доступны в классе презентации.
Рассмотрим виджет WidgetName. Вью этого виджета закодировано в файле WidgetName.widget на языке HybridJava. Компонента это Вью виджета, связанное (по имени) с классом WidgetName_WS (классом состояния виджета также известным как класс состояния компоненты). Фреймворк сохраняет инстансы классов состояний компонент в сессии, то есть все члены данных инстанса класса состояния виджета существуют на протяжении всей сессии. Метод $handleComponent этого класса вызывается фреймворком когда приходит HTTP запрос адресованный странице, однако до того, как вызывается метод $handle. Метод $handleComponent компоненты вызывается фреймворком до метода $handleComponent старшей компоненты.
Компилятор с HybridJava интроспектирует класс состояния компоненты, разбирает файл (.widget) View компоненты, и генерирует соответствующий Java код в виде одной или нескольких частей метода $render (упомянутого выше) класса презентации страницы, так что все данные состояния страницы напрямую доступны в коде Вью виджета. Данные класс состояния компоненты также доступны в коде Вью компоненты.
Для чисто Вью компонент (в случае если не задан класс состояния компоненты) не создается никаких инстансов, так что эти компоненты воистину lightweight. Во время исполнения не строится никакого дерева компонент .
Все presentation-данные страниц и компонент хранятся в единственной копии, доступной как из кода Вью, так и из кода Контроллера. Следовательно, нет нужды в использовании JavaBeans, или в ручной синхронизации данных.
Фреймворк заботится о распределении информации, закодированной в параметрах HTTP запроса среди обработчиков соответствующих компонент или страницы. Это работает и для вложенных циклов и/или рекурсии.
Обработчики компонент должны извлекать данные их параметров HTTP используя метод $getParam. Он похож на метод getParameter класса ServletRequest, с тем отличием что доступны только лишь значения пришедшие из Вью данного инстанса компоненты.
Обработчики обмениваются данными с бизнес слоем и меняют данные составляющие состояние представления компоненты/страницы. Redirect не используется для перехода к следующей странице. После вызова метода $handle фреймворк просто вызывает метод $render следующей показываемой страницы.
Документация(JavaDoc) API фреймворка есть тут. API фреймворка HybridJava надстроен над J2EE Servlet API, и, в сравнении с последним, работает с сущностями более высокого уровня: приложение, страница, и компоненты, однако объекты Request и Session также доступны.
Имплементация компонентно-ориентированной поддержки Ajax, метода "возврат к предыдущей странице" (метод $setReturn), валидации (методы $setBadParam и badParam) и сигналов (методы $accept, $send, $recend) все принадлежат только рантайму. Вы можете рассматривать эти особенности как часть примера, и имея исходники рантайма, можете от них избавиться или переписать как вам угодно.
Технология HybridJava не настаивает на использовании конкретных Servlet классов. Класс SampleServlet находящийся в примере аппликации есть на самом деле только пример использования. Достаточно иметь лишь один Servlet класс на аппликацию.
Компилятор HybridJava генерирует блоки try-catch blocks на уровне страницы и отдельно на уровне каждого виджета. Это изолирует сервер от конкретных страниц, страницы от виджетов, и виджеты от других виджетов в случае ошибки, даже если разработчик об этом не заботился.
Главная | Язык | Фреймворк | Это Не | Пример |
© 2012 HybridServerPages Group. Все права защищены.