Вы находитесь здесь: Главная > Программирование > Отделение операций над данными от визуального интерфейса

Отделение операций над данными от визуального интерфейса

Детские аниматоры на праздник аниматор детский праздник. .

internetПродемонстрируем на примере, как работает модель MVC. Для этого возьмем простую систему публикации новостей и посмотрим, как реализовать ее с приме­нением этой модели и без нее.

Стандартный способ извлечения новостей из базы данных и их публикации — написать PHP-сценарий, который бы подключался к базе данных, посылал в нее запрос, перебирал в цикле результаты запроса, генерировал для каждой заметки HTML-код и отображал его. Следующий код является примером такого сценария:

<?php

mysql_connect (...);

$result = mysql_query (1 select * from news order by article_date desc1);

?>

<html>

<body>

<hl>News Articles</hl>

<?php while ($row = mysql_fetch_object ($result)) { ?>

<h2x?php echo $row->headline ?></h2> <p>

<?php echo $row->body ?>

</p> <?php } ?> </body> </html>

 

В этом сценарии часть, отвечающая за операции, — это подключение к серверу баз данных и получение записей из таблицы news. Часть, отвечающая за визуальную презентацию, — это HTML-код для вывода на экран статей, полученных из базы.

Недостаток подобного сценария заключается в том, что его трудно дорабатывать, особенно если нужно изменить что-то в работе системы хранения и обработки новос­тей (например, переименовать таблицу базы данных в news_articles). Может пока­заться, что для этого достаточно внести несложные изменения тут эке, на месте. Но что если те же статьи отображаются и на других страницах? Придется вставлять ту­да такой же код и соответственно дорабатывать его по мере необходимости.

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

Второе изменение будет состоять в том, чтобы отделить вызов функции для за­грузки статей от собственно HTML-кода. Это изменение не так существенно, как первое, но все же важно. Благодаря ему можно смело редактировать HTML-код, не беспокоясь о способе генерирования тех данных, для форматирования которых он предназначен. В терминах архитектуры MVC мы тем самым отделяем контроллер от представления.

Показано, как приведенный выше код реструктурируется в архитек­туру МУС.

 

Система публикации статей с использованием подхода MVC

В версии системы публикации на основе шаблона MVC у нас будет три файла. Это файл, отвечающий за модель:

<?php

function get_articles () {

mysql_connect (...);

$result = mysql_query ('select * from news order by arti- cle_date desc *);

$articles = array ();

while ($row = mysql_fetch_objects ($result)) { $articles[] = $row;

}

return $articles;

}

?>

А вот контроллер:

<?php

$articles = get_articles (); display_template (1 articles.tpl1);

?>

 

Примечание

Функция display_tempiate () — это фиктивная функция, представляющая некий механизм по обра­ботке шаблонов форматирования.

И наконец, представление:

<html>

<body>

<hl>News Articles</hl>

<?php foreach ($articles as $row) { ?>

<h2x?php echo $row->headline ?></h2> <p>

<?php echo $row->body ?>

</p> <?php } ?> </body> </html>

 

Хотя приведенный пример довольно тривиален, преимущества архитектуры МУС сразу станут видны, если подробнее рассмотреть операции над новостными заметками (добавление, редактирование, удаление). Сущий кошмар — заниматься отладкой и доработкой программ, в которых перемешаны прямые SQL-запросы и код HTML для отображения веб-страниц.

Организация свадьбы Москва

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • Twitter
  • RSS

Оставить комментарий

This blog is kept spam free by WP-SpamFree.