Наличие уровня содержимого (данных) позволяет избежать изменений в коде уровней логики и представления (что облегчает сопровождение кода).
А использование компонента доступа на основе различных классов дает независимость в смысле хранения данных. Поскольку переход на новую СУБД или иной метод хранения данных требует минимальных затрат по кодированию. Создать новый класс с переопределением методов.
Уровень логики.Уровень логики обычно представляется рядом классов, каждый из которых инкапсулирует различные бизнес-правила или логические компоненты. На этом уровне кодируется функциональность всей системы. Уровень логики обращается к уровню содержимого для получения данных, которые должны обрабатываться. Он обращается с запросами к модели данных и выполняет обновление в соответствии со специфической логикой приложения. Уровень логики управляет отображением обработанных данных, обращаясь к уровню представления.
В нашем примере в уровне логики можно выделить два логических модуля. Во-первых, это управляющий модуль (администрирования), в котором можно создавать опросы, добавлять и удалять варианты ответов, выбирать текущий опрос и т. д. Его можно реализовать с помощью простых форм HTML, используя уровень представления для показа форм и уровень обработки данных для взаимодействия с моделью данных.
Во-вторых, нужен модуль приложения, в котором пользователь будет видеть действующий опрос, голосовать и видеть результаты опроса.
Таким образом, мы можем создать класс Poll_Admin с функциями администрирования и отображения форм в браузере и класс Poll_Application с функциями показа опроса, обработки голосования и отображения результатов.
Уровень представления.На уровне представления находятся все функции, необходимые для представления данных клиенту. В этом уровне можно выделить два компонента:
• Компонент языка представления.Этот компонент инкапсулирует функции представления, соответствующие выбранному языку представления, которым может быть, например, HTML. Когда возникает потребность в абстрактной функции представления, ее просто добавляют в компоненту языка представления.
• Компонент представления данных.Компонент представления данных пользуется компонентом языка представления для расположения и показа данных. В него помещаются все функции, необходимые для отображения данных.
Языки представления.Есть множество новых языков представления, с помощью которых можно показывать страницы в браузерах и даже языки с поддержкой голоса для телефона. Вот краткий перечень некоторых языков представления:
В уровне представления строится класс HTML для генерации форм, показа форм, создания таблиц и т. д. Это общий класс, который может сильно увеличиваться в размере по мере создания новых приложений, требующих реализации новых функций (методов) представления.
Компонент представления данных должен содержать методы для отображения формы опроса, вывода результатов и создания форм. Этот класс будет клиентом класса HTML, а основная идея состоит в том, что в классе представления данных не должно быть вообще никакого кода HTML (используются только вызовы класса HTML).
Итак, создавая приложение для опроса на основе этой архитектуры, мы добиваемся разделения уровней содержимого, логики и представления. Мы также добиваемся независимости от базы данных с помощью абстрактного класса БД и независимости от языка представления с помощью класса HTML.
Посмотрим теперь, что произойдет, если возникнет необходимость модифицировать это приложение.
Вариант 1: новый вид результатов опроса
Предположим, что показ вариантов, количества голосов и результатов мы организовали в виде таблицы. Допустим, что дизайнеры решили графически представить процент голосов, поданных за каждый вариант.
В данной архитектуре мы должны модифицировать только уровень представления данных, чтобы воспользоваться функциями класса HTML, создающими графические прямоугольники. Если такой функциональности в классе HTML нет, придется ее создать. При этом может оказаться, что есть другие приложения, которым нужны графические прямоугольники, и они смогут повторно использовать наш код. Как видим, в уровне логики изменения не потребовались. Представление и логика оказались независимы.
Вариант 2: запретить пользователю голосовать несколько раз
Здесь потребуется модифицировать логику. Чтобы не дать пользователям возможность повторно голосовать в одном и том же опросе, можно прибегнуть к cookies. Приняв такое решение, мы добавим применение cookies и управляющие элементы в уровень логики приложения.
Эти изменения не повлияют на уровни содержимого или представления.
Вариант 3: версия с Flash
Дизайнеры хотят представить все приложение с помощью анимаций Flash. Для этого они могут просто создать класс Flash с таким же интерфейсом, как у класса HTML, и реализовать каждый метод класса HTML с помощью Flash-функций РНР. Больше нам ничего не придется модифицировать, и мы получим Flash-приложение опроса.