Реализация архитектурного шаблона MVC с использованием шаблона проектирования «Наблюдатель» на языке PHP | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 7 декабря, печатный экземпляр отправим 11 декабря.

Опубликовать статью в журнале

Авторы: ,

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №6 (65) май-1 2014 г.

Дата публикации: 04.05.2014

Статья просмотрена: 2185 раз

Библиографическое описание:

Лясин, Д. Н. Реализация архитектурного шаблона MVC с использованием шаблона проектирования «Наблюдатель» на языке PHP / Д. Н. Лясин, О. Н. Симонова. — Текст : непосредственный // Молодой ученый. — 2014. — № 6 (65). — С. 108-111. — URL: https://moluch.ru/archive/65/10770/ (дата обращения: 25.11.2024).

В статьерассматриваются особенности реализации и пример использования архитектурного шаблона MVCи шаблона «наблюдатель» для разработки веб-приложений на языке PHP.

Ключевыеслова: архитектурный шаблон, шаблон проектирования, MVC, наблюдатель, веб-приложение.

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

При разработке серверных веб-приложений на языке PHP все чаще применяется объектно-ориентированный подход с использованием архитектурного шаблона MVC (от англ. Model-View-Controller). Этот шаблон предполагает разделение программной системы на несколько компонентов, называемых модель (Model), вид (View) и контроллер (Controller), благодаря чему бизнес-логика приложения отделяется от пользовательского интерфейса. Такое приложение проще изменять, масштабировать, тестировать и сопровождать.

Реализовать взаимодействие между моделью и видом можно различными способами. Часто для этой цели используется поведенческий шаблон проектирования «наблюдатель» (Observer). Он позволяет классу-наблюдателю (observer) получать оповещения от класса-наблюдаемого (observable) об изменении своего состояния, реализуя тем самым схему взаимодействия «издатель-подписчик». В качестве наблюдателя в шаблоне MVC выступает вид (или несколько видов), а в качестве наблюдаемого — модель. Виды регистрируются в модели, которая оповещает их об изменении своего состояния. После получения оповещения виды извлекают из модели необходимые данные и динамически генерируют веб-страницу.

Эффективно реализовать шаблон «наблюдатель» на языке PHP можно с использованием стандартной библиотеки PHP (Standard PHP Library, SPL), которая была введена в PHP5 [1]. Для этого используются следующие классы и интерфейсы, предоставляемые SPL:

SplSubject — интерфейс, предназначенный для наследования классом-наблюдаемым. Интерфейс объявляет следующие абстрактные методы:

SplSubject::attach(SplObserver$observer) — метод, позволяющий зарегистрировать объект-наблюдатель для последующей отправки ему оповещений;

SplSubject::detach(SplObserver$observer) — метод, удаляющий наблюдателя из списка зарегистрированных;

SplSubject::notify(void) — метод, который нужно вызывать для оповещения зарегистрированных наблюдателей об изменении своего состояния.

SplObserver — интерфейс, предназначенный для наследования классом-наблюдателем. Он объявляет единственный абстрактный метод SplSubject::update(), который должен быть определен в наблюдателе. Этот метод будет вызываться, когда объект класса SplSubject вызовет метод notify().

SplObjectStorage — класс, позволяющий сохранять в контейнере и удалять из контейнера объекты классов-наблюдателей при помощи методов attach() и detach().

Рассмотрим пример PHP-приложения, построенного на основе архитектурного шаблона MVC с применением шаблона «наблюдатель» для реализации взаимодействия модели и вида.

Диаграмма UML, иллюстрирующая взаимосвязи между классами, приведена на рисунке 1.

Рис. 1. Диаграмма классов, реализующих шаблон MVC с использованием шаблона «наблюдатель»

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

class Model implements SplSubject

{

            private $storage;

            public $status;

            public function __construct($server, $user, $pass, $base)

            {

                        $this->storage = new SplObjectStorage();

            }

            function attach(SplObserver $observer)

            {

                        $this->storage->attach($observer);

            }

            function detach(SplObserver $observer)

            {

                        $this->storage->detach($observer);

            }

            function notify()

            {

                        foreach($this->storage as $obj)

{

                                   $obj->update($this);

                        }

            }

}

Классы моделей, реализующие действия, связанные с предметной областью приложения, являются потомками базового класса Model. Например, для раздела сайта, в котором можно просматривать и редактировать список подразделений организации, существуют класс Model_editPlaceInfo:

class Model_editPlaceInfo extends Model

{

//...

}

Класс View, который будет являться родительским для всех видов приложения, наследуется от класса Observer, который в свою очередь наследует интерфейс SplObserver:

abstract class Observer implements SplObserver

{

            function update(SplSubject $subject)

            {

                        $this->doUpdate($subject);

            }

            abstract function doUpdate(Model $model);

}

class View extends Observer

{

            function doUpdate(Model $model)

{

                        //...

            }

}

Классы видов, которые генерируют веб-страницы и передают их пользователю для отображения в браузере, являются потомками класса View. Например:

class View_editPlaceInfo extends View

{

             functiondoUpdate(Model $model)

            {

                        //...

            }

}

Непосредственное создание веб-страниц производится в методе doUpdate(). Он получает указатель на объект модели, из которой он может извлечь все данные, необходимые для отображения на странице.

Запросы пользователя веб-ресурса обрабатываются с использованием шаблона Front Controller [2], который обеспечивает единую точку обработки всех входящих запросов. После анализа URL, полученного в запросе пользователя, Front Controller определяет, какой из имеющихся контроллеров MVC необходимо использовать для его выполнения, и создает объект соответствующего класса. Front Controller также определяет действие, которое контроллер должен выполнить, и вызывает соответствующий метод, например action_getPlaceInfo(). В конструкторе контроллера __construct() создаются экземпляры классов модели (Model_editPlaceInfo) и вида (View_editPlaceInfo). Далее контроллер, в соответствии с логикой работы шаблона «наблюдатель», регистрирует вид в модели путем вызова метода attach():

$model=new Model_editPlaceInfo($params["server"], $params["user"], $params["pass"], $params["base"]);  

$view=new View_editPlaceInfo();

$model->attach($view);

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

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

Построение веб-приложения на основе объектно-ориентированного подхода с применением архитектурного шаблона MVC и поведенческого шаблона проектирования «наблюдатель» улучшает структурированность, масштабируемость и надежность программной системы, облегчает ее модификацию и сопровождение.

Литература:

1.      http://www.php.net/manual/ru/book.spl.php

2.      http://www.oracle.com/technetwork/java/frontcontroller-135648.html

3.      Зандстра М. PHP. Объекты, шаблоны и методики программирования. М.: Вильямс, 2011.

Основные термины (генерируются автоматически): MVC, PHP, архитектурный шаблон, SPL, вид, использование шаблона, класс моделей, модель, базовый класс, объектно-ориентированный подход.


Ключевые слова

MVC, архитектурный шаблон, шаблон проектирования, наблюдатель, веб-приложение

Похожие статьи

Технология ASP.NET MVC

В статье рассматривается проектирование архитектуры приложений ASP.NET MVC. Авторы описывают теоретические основы ASP.NET MVC, которые необходимы для разработки web-приложений платформы.NET Framework.

Паттерн проектирования «прототип» в языке программирования Python

Данная статья рассматривает паттерн проектирования «прототип» в Python.

Разработка алгоритма валидации форм на клиентской стороне для передачи данных

В данной статье рассмотрены методы и алгоритмы функционирования систем клиент-серверной архитектуры для передачи данных с помощью технологий программных инструментов: HTML, CSS, Javascript.

Паттерн проектирования «Одиночка» в языке программирования Python

Данная статья рассматривает паттерн проектирования «Одиночка» в Python.

Разработка мобильных приложений с использованием облачных баз данных

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

Разработка и внедрение библиотеки валидации на клиентском языке JavaScript

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

Проектирование информационной системы при помощи UML-диаграмм на примере информационной системы ресторана

В данной статье рассматривается проектирование информационной системы при помощи UML-диаграмм. Для построения диаграмм используется case-средство Visual Paradigm.

PlantUML: создание диаграмм с использованием текстового синтаксиса

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

Работа с элементами GUI на примере приложения с использованием кроссплатформенного фреймворка Qt

В статье подробно разобран код приложения, написанного с использованием кроссплатформенного фреймворка Qt основанного на языке C++. Приложение Dynamic Layouts является одним из примеров, входящих в пакет Qt Creator. На примере данного приложения расс...

Рассмотрение декларативного подхода к разработке интерфейсов мобильных приложений для Android

В данной статье рассматриваются императивный и декларативный подходы к разработке интерфейсов, анализируются преимущества и недостатки библиотеки Jetpack Compose.

Похожие статьи

Технология ASP.NET MVC

В статье рассматривается проектирование архитектуры приложений ASP.NET MVC. Авторы описывают теоретические основы ASP.NET MVC, которые необходимы для разработки web-приложений платформы.NET Framework.

Паттерн проектирования «прототип» в языке программирования Python

Данная статья рассматривает паттерн проектирования «прототип» в Python.

Разработка алгоритма валидации форм на клиентской стороне для передачи данных

В данной статье рассмотрены методы и алгоритмы функционирования систем клиент-серверной архитектуры для передачи данных с помощью технологий программных инструментов: HTML, CSS, Javascript.

Паттерн проектирования «Одиночка» в языке программирования Python

Данная статья рассматривает паттерн проектирования «Одиночка» в Python.

Разработка мобильных приложений с использованием облачных баз данных

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

Разработка и внедрение библиотеки валидации на клиентском языке JavaScript

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

Проектирование информационной системы при помощи UML-диаграмм на примере информационной системы ресторана

В данной статье рассматривается проектирование информационной системы при помощи UML-диаграмм. Для построения диаграмм используется case-средство Visual Paradigm.

PlantUML: создание диаграмм с использованием текстового синтаксиса

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

Работа с элементами GUI на примере приложения с использованием кроссплатформенного фреймворка Qt

В статье подробно разобран код приложения, написанного с использованием кроссплатформенного фреймворка Qt основанного на языке C++. Приложение Dynamic Layouts является одним из примеров, входящих в пакет Qt Creator. На примере данного приложения расс...

Рассмотрение декларативного подхода к разработке интерфейсов мобильных приложений для Android

В данной статье рассматриваются императивный и декларативный подходы к разработке интерфейсов, анализируются преимущества и недостатки библиотеки Jetpack Compose.

Задать вопрос