Серверная часть системы создания и управления сайтами

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



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

На уровне реализации были использованы объектно-ориентированные возможности языка PHP для упрощения разработки и понимания системы. Диаграмма классов в данном случае излишня, так как классы использованы только в качестве пространства имен.

Менеджер хранилища содержит множество методов для смыслового общения с системой. Например, метод MccGetTemplates ($project_uid) достает из базы данных список шаблонов, соответствующих проекту $project_uid. Такой подход позволяет понизить сложность разработки системы в целом. По большому счету, менеджер хранилища содержит соответствующий метод для каждого действия координатора. Все доступные методы Менеджера Хранилища представлены в таблице 3.1.

Таблица 3.1 - Методы Менеджера Хранилища

МетодОписаниеAddProject ($project_uid)Добавляет новый проектAddResource ($uid, $isglobal, $path, $type, $project_uid, $usedin_uid = NULL, $usedin_type = NULL)Добавляет новый ресурсAddTemplate ($template_uid, $draft_uid, $creation_time, $modification_time, $object_data, $project_uid)Добавляет новый шаблонAddPage ($page_uid, $draft_uid, $template_uid, $creation_time, $modification_time, $page_url, $object_data, $published, $generated_modification_time, $generated_draft_uid, $project_uid)Добавляет новую страницуAddDraft ($project_uid, $page_uid, $draft_uid, $template_uid, $creation_time, $modification_time, $object_data, $published)Добавляет новый черновик для страницыSaveTemplate ($project_uid, $template_uid, $draft_uid, $modification_time = FALSE, $object_data = FALSE, $new_uid = FALSE)Изменяет шаблонSavePageDraft ($project_uid, $page_uid, $draft_uid, $template_uid = FALSE, $modification_time = FALSE, $page_url = FALSE, $object_data = FALSE, $published = FALSE, $new_draftuid = FALSE, $new_pageuid = FALSE)Изменяет черновик страницыRemoveResource ($project_uid, $uid, $fromdisk = FALSE)Удаляет ресурсRemovePage ($project_uid, $uid, $fromdisk = FALSE)Удаляет страницуRemoveTemplate ($project_uid, $uid)Удаляет шаблонRemoveDraft ($project_uid, $page_uid, $draft_uid, $fromdisk = FALSE)Удаляет черновик страницыGetTemplate ($project_uid, $template_uid, $draft_uid)Возвращает шаблонGetPageDraft ($project_uid, $page_uid, $draft_uid)Возвращает черновик страницыMccGetPages ($project_uid)Возвращает список всех страниц проектаMccGetTemplates ($project_uid)Возвращает список всех шаблонов проектаMccGetStatus ($project_uid)Возвращает общую информацию о проектеGetResources ($project_uid, $usedin_type = FALSE, $usedin_uid = FALSE)Возвращает список ресурсов

Посмотрим, как введение Менеджера Хранилища упрощает логику системы в целом. Возьмем команду Координатора для удаления шаблона.

// Remove template

case template_remove:

{(! isset ($_POST[project_uid])) $project_uid = default;$project_uid = $_POST [project_uid];

$template_uid = $_POST [template_uid];$stm->RemoveTemplate ($project_uid, $template_uid);

};

В данном представлении использован Менеджер Хранилища. Теперь попробуем вставить логику Менеджера прямо в Координатор.

// Remove templatetemplate_remove:

{(! isset ($_POST[project_uid])) $project_uid = default;$project_uid = $_POST [project_uid];

$template_uid = $_POST [template_uid];

// Checking if input is correct(! valcheck:isuid ($project_uid) ||! valcheck:isuid($uid))

{Bad input;

}

$this->dbm->SelectDatabase ($this->db_name);

$project_id = $this->getIdByUid ($this->db_tables_projects, project_uid, $project_uid);

// Removing template

$table_name = $this->db_tables_templates;

$condition = array (template_uid=>$uid,

project_id=>$project_id);

$this->dbm->RemoveData ($table_name, $condition); OK;

};

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

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

Рассмотрим этот момент более детально. Ниже представлен данный интерфейс.

interface IDbm

{__construct ($host, $user, $password);__destruct();

// Removes dbRemoveDatabase ($db_name);

// Creates new dbCreateDatabase ($db_name);

// Makes db activeSelectDatabase ($db_name);

// Executes multiple queries from.sql fileExecQueryFromFile ($file_name);

// Adds row of data, $values is an arrayAddData ($table_name, $values);

// Executes sql queryExecQuery($query);

// Upadate dataUpdateData ($table_name, $new_data, $condition = NULL);

// Get one row of data with equality conditionGetData ($what, $from, $condition = NULL);

// Removes data with equality conditionRemoveData ($from, $condition = NULL);

// Get all rows of data with equality conditionGetAllData ($what, $from, $condition = NULL);

// Gets number of rows by equality conditionGetCount ($from, $condition = NULL);

}

Для реализации поддержки системой создания и управления сайтами СУБД MySQL, необходимо реализовать данный интерфейс. Т.е. создать производный от данного интерфейса класс, в котором существуют все перечисленные методы. Если эти методы будут реализованы правильно, то система обретет поддержку новой БД. Для примера возьмем метод Менеджера Хранилища для удаления шаблона.

// Removes template

function RemoveTemplate ($project_uid, $uid)

{

// Checking if input is correct(! valcheck:isuid ($project_uid) ||! valcheck:isuid($uid))

{Bad input;

}

$this->dbm->SelectDatabase ($this->db_name);

$project_id = $this->getIdByUid ($this->db_tables_projects, project_uid, $project_uid);

// Removing template

$table_name = $this->db_tables_templates;

$condition = array (template_uid=>$uid,

project_id=>$project_id);

$this->dbm->RemoveData ($table_name, $condition);

return OK;

}

Как видно, он использует метод Менеджера базы данных RemoveData. При этом нет никакой привя