В качестве реализации подсистем модели и отображения обычно предлагается сочетание шаблонов страниц с отдельным программным кодом, при котором работа программиста и дизайнера может быть максимально разделена. При построении на шаблонной технологии, например PHP, они позволяют компоновать на одной странице различные шаблонные блоки, а также вводить их содержимое в административном интерфейсе. При этом взаимное расположение блоков, основной дизайн заложены в так называемых темах сайта и не могут быть гибко изменены, хотя и позволяют проводить самостоятельную разработку. При использовании более гибких технологий (в основном, по изложенным выше причинам, выбирается Java Servlets) ядро системы позволяет определять шаблоны и программные компоненты, заполняющие содержимое, обеспечивает их взаимодействие. В наиболее высокоуровневых моделях строится объектная модель сайта, его страниц, участков страниц. К сожалению в подобных системах визуальное построение страниц и оперативное управление через Web – интерфейс отсутствуют, поскольку системы ориентированы на разработку на сервере. В качестве подсистемы управления присутствует объектная модель, позволяющая взаимодействовать с пользователем в режиме, напоминающем обычную интерактивную модель с событиями, обработчиками, передачей управления, и т.д.
Из-за упомянутых выше преимуществ основой для мощных систем построения и управления сайтами часто служит платформа Java Servlets, иногда в сочетании с возможностью использовать страницы JSP. Примерами таких технологий служат Turbine [5], Velocity [4], Struts [3]. Отметим, что все они разрабатываются в рамках проекта Jakarta разработчиков Apache’s Group, обладают открытым исходным кодом и являются бесплатными.
Рассмотрим в первую очередь Velocity и Turbine. Необходимо заметить, что это не взаимоисключающие, а дополняющие друг друга технологии, и их совместное использование является эффективным. Velocity – это система построения текстов на основе шаблонов. Она может применяться не только для создания Web – сайтов, но и других подобных задач, например автоматической генерации программной документации. Velocity позволяет создавать шаблоны страниц и заполнять их автоматически с помощью понятия контекста – объекта, общего для всей среды исполнения и несущего все данные, используемые в шаблонах. Новшеством технологии Velocity явилось понятие контекста, позднее вошедшее в спецификацию сервлетов. Таким образом Velocity является мощной реализацией подсистемы отображения, предоставляя возможности взаимодействия с внешними подсистемами модели данных. Технология Turbine является реализацией архитектуры Модель – Вид – Управление, расширяя ее до следующих сущностей: Действие (Action), Размещение (Layout), Навигация (Navigation), Экран (Screen), Страница (Page). Структура сущностей Turbine.
В роли управляющего элемента служит сервлет Turbine, который проводит обработку запросов и обращается к остальным сущностям. Объект Action является указанием на класс, обрабатывающий форму. При получении запроса от такой формы Turbine делает вызов соответствующего класса. Построение страниц затем делается на основе объекта Page, содержащего необходимую информацию о странице, такую как Layout – расположение элементов на странице, шаблон высокого уровня, Navigation – блоки навигации по сайту, включаемые в страницу, Screen – основное тело страницы, содержащее информационную часть. Очевидно, что использование Velocity уместно при генерации кода, т.е. в объекте Screen. Такая комбинация систем позволяет хранить шаблоны страниц и динамически заполнять их при обработке запроса с помощью контекста. Модель, используемая Turbine, обладает значительной гибкостью, поскольку предполагает разделение обработчиков данных и генераторов страниц. Тем не менее, предлагаемая архитектура не является логически обоснованной. Выделение блока навигации в отдельную сущность не представляется целесообразным, поскольку таких блоков может существовать большое количество, как типовых, так и специфических для сайта. А его отделение от объекта представления Screen накладывает существенные ограничения на дизайн. Система является технологией, предназначенной для разработчиков, но не имеет среды разработки, предлагая использовать стандартные средства разработки на языке Java. В целом можно отметить достаточно удачную простую архитектуру системы, но отсутствие удобных средств разработки и какой либо визуализации.
Еще одной системой управления сайтами, основанной на Java Servlets и разрабатываемой в рамках проекта Jakarta, является популярная система разработки Struts. Технология Struts не требует полного подчинения сайта, она может использоваться совместно с другими страницами. В целом Struts состоит из двух основных частей – обработчика запросов, используемого вместе со Struts API, и библиотек тэгов JSP. Сайт может быть построен, используя классический подход JSP, с использованием тэгов Struts в качестве полезных утилит. Однако при написании серьезных Web – систем становится необходимым использовать диспетчер запросов. Это сервлет – обработчик, который анализирует поступающие запросы, и на основании этих данных и конфигурации Struts передает запрос уже конкретному обработчику. Правила конфигурации достаточно гибки, и запросы могут передаваться страницам, выполненным в идеологии Struts или сторонним. Для облегчения работы с важной частью Web – приложений – формами Struts поддерживает специальный Form Bean, позволяющий легко писать обработчик форм, а также наполнять их содержимым. Реализация адаптированного подхода Модель – Вид – Управление) осуществляется следующим образом: в качестве управляющего компонента работает сервлет – диспетчер Struts, осуществляющий необходимые вызовы. В качестве модели и для реализации бизнес логики используются классы действий (Action classes), вызываемые диспетчером. Для представления данных используются страницы JSP, вызов которым передается от диспетчера, и которые используют библиотеки тэгов. Также особое внимание в Struts уделяется использованию JavaBeans для отделения дизайна от логики. Несмотря на то, что, во многом Struts является более набором взаимосвязанных утилит, чем целостной системой нельзя не признать ее удачную архитектуру и огромную гибкость в использовании. Технология предоставляет массу полезных инструментов для разработчика, но не имеет своей среды разработки и средств визуализации. Таким образом, она становится удачным связующим звеном между необходимыми диспетчерскими обработками сервлетов и шаблонами JSP, реализуя архитектуру Модель – Вид – Управление.
Таким образом, поиск оптимальной реализации архитектуры Модель – Вид – Управление для систем управления сайтами является актуальным и находит свое применение в различных существующих системах построения сайтов.
Заключение
В предыдущих разделах были проанализированы подходы к системам управления сайтами, рассмотрены их достоинства и недостатки. Таких систем существует достаточно большое количество, наиболее популярные из них также были рассмотрены выше. Однако, ни одна из систем не получила по настоящему массового применения, поскольку не удовлетворяет всей совокупности требований, предъявляемых к системам управления сайтами. Попытки создать более совершенную систему продолжаются как со стороны групп разработчиков бесплатного ПО, так и со стороны коммерческих компаний.
Списоклитературы
Holloway T. Struts: a Solid Web-App Framework.
(http://www.fawcette.com/javapro/2002_04/magazine/features/tholloway/default_pf.asp)
Руководство разработчика Velocity. (http://jakarta.apache.org/velocity/developer-guide.html)
Спецификация технологии Turbine. (http://jakarta.apache.org/turbine/fsd.html)
Model-View-Controller. Microsoft Patterns & Practices. (http://msdn.microsoft.com/library/en-us/dnpatterns/html/DesMVC.asp)