Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам»




НазваниеДипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам»
страница5/10
Дата01.10.2012
Размер0.53 Mb.
ТипДиплом
1   2   3   4   5   6   7   8   9   10

2.4 Определение взаимосвязи между компонентами системы


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

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

Схема взаимосвязи между компонентами системы представлена на Рисунке 2.4.



Рисунок 2.4. Схема взаимосвязи между компонентами системы

2.5 Разработка алгоритма работы библиотеки



2.6 Разработка компонентов библиотеки


Дипломантом был разработан набор компонентов, отвечающих требованиям ТЗ и необходимых для решения задачи трансформации данных полученных от СУБД и представленных в промежуточном формате – XML, посредством XSLT-трансформаций в формат XHTML.

2.6.1 Разработка компонента обмена данными с СУБД MySQL


В рамках работы над дипломным проектом, дипломантом был разработан компонент, отвечающий за обмен данными с СУБД MySQL.

Компонент для работы с СУБД MySQL предназначен для обмена данными с БД MySQL. Также в данном проекте он реализует компонент «модель» архитектуры MVC.

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

С полученным объектом можно производить различные действия – изменять его атрибуты, изменять его связи с другими компонентами, удалять.

Модель – описание объекта системы. Но т.к. хранение данных в системе реализовано через реляционную СУБД MySQL, данные необходимо преобразовать.

В данной дипломной работе используется такой подход объектно-ориентированного программирования, как ORM (Object-Relational Mapping – объектно-реляционная проекция).

ORM является слоем абстракции, который находится между конечной системой и СУБД. Также ORM осуществляет валидацию полученных данных.

Учитывая вышесказанное, работа компонента осуществляется следующим образом: компонент реализует базовую сущность – модель, на которой основываются другие сущности системы, с которыми работает программист. Это реализуется с помощью такой парадигмы объектно-ориентированного программирования, как наследование.

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

Компонент включает в себя набор модулей, реализующих его внутренний функционал, такой как непосредственная работа с СУБД, формирование объектов, определение связей между компонентами и т.п.

Модуль CallBack


Дипломантом был разработан подмодуль предназначенного для работы с СУБД модуля – CallBack.

Модуль CallBack осуществляет обработку внутренних событий компонента. Он решает такие задачи, как обновления объектов связанных с объектом, который был изменен.

Модуль CallBack не предназначен для использования напрямую. Обращение к нему происходит через специальные константы, которые объявляются непосредственно в модели.

Всего в системе существует 15 предопределенных констант: after_construct, before_save, after_save, before_create, after_create, before_update, after_update, before_validation, after_validation, before_validation_on_create, after_validation_on_create, before_validation_on_update, after_validation_on_update, before_destroy, after_destroy. Определение обработчиков осуществляется через объявление этих специальных переменных:

Class User extends Model {
static $before_update = array(‘user_func’);
public function user_func() {

}
}


Приведенный выше пример показывает, что перед внесении изменений в объект класса User (за это отвечает специальная переменная before_update) должны выполниться действия, описанные в пользовательском методе user_func класса User.

Модуль Connection


Также как и предыдущий модуль носит вспомогательный характер и предназначен для установки и поддержания соединения с БД. Также носит функции безопасности – экранирует спецсимволы в непосредственных запросах к БД, для того, чтобы предотвратить такие типы атак, как SQL-инъекция.

Модуль Exception


Модуль Exception предназначен для обнаружения ошибок и экранирования служебной информации, не предназначенной для пользователей системы.

Модуль реализует конкретные типы ошибок, как частные случаи общего класса Exception.

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

Модуль Model


Модуль Model, разработанный дипломантом, – один из основных модулей компонента. Этот модуль обеспечивает взаимодействие объектов системы между собой и с пользователем. Модуль содержит в себе класс Model, который не используется напрямую в системе, но является родительским для любой сущности с заведенной в системе (например пользователь, материал или какая-то информация, размещенная в базе данных). Это достигается за счет такого приема объектно-ориентированного программирования, как наследование.

В свою очередь дочерние классы модуля образуют набор моделей, которые позволяют реализовать компонент «модель» архитектуру MVC.

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

Например, в системе есть модель Пользователь. У модели есть метод Find, который позволяет находить объекты, соответствующие данной модели по заданным атрибутам. Используя метод Find, можно найти пользователей с определенным именем или фамилией: User::Find(array(‘Ivanov’, ‘Petrov’)). В этом случае метод вернет набор объектов класса пользователь, у которых атрибут фамилия имеет значение Ivanov или Petrov.

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

2.6.2 Разработка компонента преобразования реляционных данных в формат XML


В данной дипломной работе была проведена разработка компонента итоговой библиотеки, отвечающего за преобразование полученных от MySQL данных в промежуточный формат – XML.

Необходимость разработки этого компонента очевидна из ТЗ на данную дипломную работу.

Работа данного компонента строится следующим образом:

  1. Каждый контроллер формирует входной массив данных;

  2. Полученный массив данных передается в компоненту преобразования данных в формат XML;

  3. Полученный массив соединяется с итоговым массивом данных, которые должны быть преобразованы в формат XML;

  4. После того, как все данные получены и произошел запуск соответствующего события, управление передается данному компоненту;

  5. Создается коренной элемент итогового XML-дерева;

  6. С помощью рекурсивного метода XMLize происходит обход итогового массива данных и преобразование его элементов в элементы XML-документа, их атрибуты и значения.

Итоговый массив данных имеет следующую структуру: ключи массива первого уровня – названия контроллеров, которые вернули эти данные, их значения – массив, состоящий из подмассивов, включающих следующие ключи:

  • name – название тэга будущего элемента XML-дерева;

  • params – массив из ключей – атрибутов и их значений, которые будут установлены для тэга;

  • value – может быть значением, которое будет содержаться в теге, а может быть массивом с такой же структурой, как и его родитель.

Метод XMLize


Метод XMLize – рекурсивный метод, который получает на вход массив данных и преобразует их в элементы XML-дерева.

Метод работает следующим образом:

Он получает на вход массив, устроенный следующим образом: у него есть 3 ключа – name, params и value. Ключ value, в качестве значения, может содержать массив по своей структуре аналогичный его родительскому.

После того, как на вход функции поступил массив, он начинает разбираться:

  1. Ключ value проверяется на значение – если значение – массив, то функция вызывается рекурсивно и на ее вход подается массив – значение ключа value.

  2. Если значение value не массив, то создается новый элемент с названием указанным в name и значением указанным в value;

  3. Разбирается массив параметров (значение ключа params) и только что созданному элементу устанавливаются атрибуты: название – текущий ключ массива параметров, значение – соответствующее значение.

2.6.3 Разработка компонента преобразования XML-документа в XHTML-документ посредством XSLT трансформаций


В данной дипломной работе был разработан компонент, отвечающий за преобразование данных в формате XML в формат HTML/XHTML посредством XSLT-Трансформаций. Необходимость этого компонента отражена в ТЗ на данную дипломную работу.

Компонент работает следующим образом: после того, как все контроллеры закончат операции связанные с обработкой и получением данных и эти данные будут преобразованы в формат XML, в системе появляется соответствующее событие и управление предается данному компоненту.

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

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

2.6.4 Разработка компонента, реализующего событийную модель


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

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

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

Реализуется этот подход за счет компонента Events.

Компонент Events имеет 5 основных методов – AddEventHandler, catchEvent, throwEvent, removeEvent, removeHandler.

Метод AddEventHandler


Метод AddEventHandler разработан дипломантом для регистрации новых обработчиков для штатных событий системы.

Метод AddEventHandler получает на входе следующие данные:

  • Название события;

  • Имя класса, которому принадлежит метод, обрабатывающий событие;

  • Имя метода, который должен обработать событие;

  • Параметры, которые необходимы для работы метода.

После того, как методу переданы все входные данные, он проверяет, есть ли в системе такое событие, имя которого ему было передано и привязывает к нему обработчик.

Метод removeEvent


Метод removeEvent необходим для того, чтобы отменить раннее созданное событие вместе со всеми обработчиками, которые должны сработать при освобождении этого события.

На вход метода поступает только один параметр – имя события, которое необходимо отменить.

Метод removeHandler


Метод removeHandler разработан для того, чтобы удалить один из обработчиков события. На вход метода поступают следующие данные:

  • Имя события;

  • Имя класса, которому принадлежит метод-обработчик;

  • Имя метода-обработчика.

После того, как все эти данные поступили в метод, происходит проверка на наличие в системе соответствующего события, и обработчика и удаление этого обработчика.

Метод throwEvent


Метод throwEvent – публичный метод, необходимый для того, чтобы объект-инициатор мог произвести запуск (освобождение) события.

На вход метода поступает только название события, которое необходимо освободить и далее управление передается методу catchEvent.

Метод catchEvent


После передачи управления методу catchEvent происходят проверки существования указанных обработчиков и далее они запускаются в том порядке, в котором были созданы в системе.

2.6.5 Разработка компонента, реализующего URI-роутинг


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

Все страницы, к которым может обратиться пользователь, контроллеры, которые их обрабатывают и параметры, которые им необходимо передать, описаны в специальном файле modules.xml. Структура файла modules.xml показана ниже:











1





2





Логика работы компонента строится следующим образом:

  1. Пользователь обращается к серверу;

  2. URI, переданный серверу, разбирается компонентом URI-роутинга на составные части;

  3. На основе разобранного URI формируется XPATH-выражение;

  4. Производится запрос к modules.xml через полученное XPATH-выражение;

  5. Полученный узел XML-дерева разбирается на составные части, из которых видно каким контроллерам и с какими входными параметрами необходимо передать управление, и эти данные записываются в массив в глобальной области видимости приложения.

Основные секции файла modules.xml


Корневой элемент файла – root, является родительским элементом для секций первого уровня и содержит как общую информацию о странцах, так и информацию о контроллерах, необходимых для формирования главной страницы.

Секция default_modules содержит в себе список контроллеров, которые необходимо подключать для всех страниц. К таким контроллерам можно отнести контроллеры общего назначения, такие, как вывод меню, или текстовый блок с заголовком страницы.

Секция error отвечает за описание контроллера, которому будет передано управление в случае ошибки в работе приложения, например обращение к несуществующей странице.

Секция module создается для каждого контролера, работающего на странице, и обладает таким атрибутом, как name. Атрибут name содержит в себе имя контроллера. У секции module есть дочерняя секция param.

Секция param также обладает атрибутом name, в котором содержится имя параметра, а в самой секции заключено значение данного параметра.

Также у корневого элемента могут быть потомки, описывающие внутренние страницы, например about (см. листинг 2.2). Название тэга, описывающего секцию – about, должно быть включено в URI, через который идет обращение к серверу. Т.е. если пользователь запрашивает документ, находящийся по адресу http://www.mysite.ru/about/, будет сформировано XPATH-выражение, вида /root/about.

2.6.6 Разработка компонента реализующего механизм кеширования


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

В результате работы над данной дипломной работой, было реализовано 2 типа кеширования: кеширование данных и кеширование итоговой страницы – HTML-кеширование. Такой подход позволяет снизить нагрузку на сервер, занимающийся непосредственно вычислениями и обработкой пользовательских запросов и на сервер баз данных, т.к. кеширование данных позволяет сократить количество запросов к СУБД.

Достигается это следующим образом: кеширование данных необходимо для сокращения количества запросов к СУБД и снижения вычислительной нагрузки на сервер, отсюда следует, что полученные в результате работы контроллера данные необходимо сохранить на жесткий диск сервера. Такой подход позволяет сразу считывать данные в уже пригодном, для передачи в компонент, реализующий логику представления, виде. При использовании такого типа кеширования, можно достичь динамики при отображении итоговой страницы посредством таких технологий, как Javascript[34], но не снимает необходимости в XSLT-преобразованиях, которые также достаточно ресурсоемки.

Второй тип кеширования, реализованный в данной дипломной работе – кеширования всей итоговой страницы.

Такой подход к кешированию максимально снижает нагрузку на сервер, но приводит к потере динамики итоговой страницы. Это происходит из-за того, что при использовании вставок динамических элементов, например Javascript, исходный код также будет помещен в кеш.

Оба типа кеширования обладают одинаковым API и различаются только внутренней реализацией.

Обращение к компоненту кеширования строится следущим образом:

  1. Формируется уникальный идентификатор для записи кеша и устанавливается время жизни кеш-записи;

  2. Производится проверка наличия соответствующей записи в кеше и ее актуальность;

  3. Если запись найдена и она актуальна, то возвращаются данные, находящиеся в ней, или вся страница, в случае HTML-кеширования;

  4. Полученные данные передаются для дальнейшей обработки;

  5. Если запись не найдена, либо время жизни кеш-записи истекло, то производятся обращения к СУБД и промежуточные вычисления, полученные данные передаются для дальнейшей обработки, а так же создается новая запись в кеше с соответствующим именем.

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

Идентификатор кеш-записи должен быть уникальным и неизменным для каждой записи. Это необходимо для исключения тиражирования кеш-записей, содержащих одинаковые данные, но имеющие разные имена. Это достигается, к примеру, за счет выбора в качестве идентификатора текущего URI, и хэширования егое с помощью алгоритма md5, т.к. в PHP есть специальная функция для выполнения таких действий.
1   2   3   4   5   6   7   8   9   10

Похожие:

Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам» iconДипломному проекту (работе) На тему Разработка общей поисковой системы для
Разработать объединяющую поисковую систему для электронных ресурсов кафедры икт на основе поисковых механизмов каждого ресурса в...
Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам» iconПояснительная записка к дипломному проекту (работе) На тему: «Разработка телекоммуникационной системы для поддержки научно-исследовательской деятельности ио ран»
На тему: «Разработка телекоммуникационной системы для поддержки научно-исследовательской деятельности ио ран»
Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам» iconДипломному проекту (работе) На тему Разработка системы защиты от распределенных атак на отказ в обслуживании типа
На тему «Разработка системы защиты от распределенных атак на отказ в обслуживании типа http-flood»
Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам» iconРеферат в пояснительной записке к дипломному проекту на тему «11-этажный жилой дом с мансардой»
В пояснительной записке к дипломному проекту на тему «11-этажный жилой дом с мансардой» представлены архитектурно-строительные, расчетно-конструктивные...
Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам» iconДипломному проекту на тему: «Разработка методов встраивания информации в пространственную область изображения»
Санкт-Петербургский государственный электротехнический университет “лэти” им. В. И. Ульянова (Ленина)” (СПбгэту)
Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам» iconЗадача агента, предлагаемого в данной работе, состоит в пополнении коллекции новыми релевантными ее тематике документами. Как правило, работа такого агента начинается с некоторого множества html документов (ядра коллекции), заданных администратором коллекции.
Информационный агент для формирования тематической коллекции электронных документов
Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам» iconПояснительная записка к дипломной работе На тему: «Разработка системы автоматизации функций формирования scorm совместимых метаданных для информационных ресурсов»
На тему: «Разработка системы автоматизации функций формирования scorm совместимых метаданных для информационных ресурсов»
Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам» iconПояснительная записка к дипломному проекту to На тему: «Разработка проблемно-ориентированного языка программирования»
Московский государственный институт электроники и математики московский государственный институт электроники и математики
Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам» iconПояснительная записка к дипломному проекту на тему: Разработка методических основ по системам активной и пассивной безопасности автомобиля
Разработка методических основ по системам активной и пассивной безопасности автомобиля
Дипломному проекту (работе) На тему «Разработка библиотеки компонентов для динамического формирования html-документов по настраиваемым шаблонам» iconДипломному проекту На тему «Построение безопасной корпоративной сети»
Охватывает все области передачи/хранения/обработки информации в компании
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница