Для разделения уровней необходимо создать абстракции. Каждый уровень должен быть представлен программной абстракцией: объектно-ориентированное программирование, проектные схемы и тщательное проектирование служат лучшими инструментами для решения этой задачи.
Минимизация взаимодействия между уровнями становится обязательным требованием, когда необходимо сохранить производительность и гибкость при масштабировании. Процесс разработки многозвенного приложения должен решать, по меньшей мере, следующие задачи:
♦ Сопровождаемость
♦ Модульное программирование
♦ Независимость логики и представления
♦ Независимость логики и содержимого
♦ Переносимость
♦ Независимость от типа базы данных
♦ Повторное использование кода
Ниже обсуждаются некоторые из этих вопросов.
Модульное программирование
Необходимость модульного программирования вызывается тем, что без него трудно отделить определенные нами уровни один от другого. Модульное программирование приводит к созданию изолированных и замкнутых модулей для каждого логического элемента системы. Лучшим методом повышения модульности кода РНР является применение ООП, поскольку оно способствует тестированию блоков и их взаимодействию, применению методологии ХР, проектных схем и повторному использованию кода.
Этой последней возможности необходимо уделить особое внимание. Ее обеспечение облегчает сопровождение программного продукта и сокращает объем работы при кодировании новых приложений.
Независимость логики и представления
Разделение логики и представления является ключом к созданию легко модифицируемого программного обеспечения. Идея проста - если дизайнеры захотят изменить внешний вид сайта, то не потребуется модифицировать логику, а если редакторы изменят содержимое, то изменения не отразятся на логике приложения.
Независимость логики и содержимого
Изменения содержимого не должны отражаться на логике приложения.
Независимость от типа базы данных
Если приложение работает с базой данных, то оно не должно зависеть от ее конкретного типа. Необходимо, чтобы при замене СУБД не пришлось модифицировать уровень логики приложения.
Проектирование приложения для опроса
Рассмотрим небольшой пример, на котором проиллюстрируем уровни приложения и способы их выделения. В нашем примере приложения для голосования есть текущий опрос и все остальные опросы. В каждом опросе есть варианты ответа, и при голосовании пользователя показываются результаты опроса.