Блог веб-разработчика: в помощь программистам

Модель, вид, контроллер (MVC)

Первое появление языка РНР было очень похоже на небольшую революцию. Интерактивные Web-приложения с возможностями, которые однажды были реализованы разработчиком-профессионалом, стали появляться повсюду. В самых необычных местах вдруг стало появляться динамичное содержимое, которое выглядело очень сложным и пришло совсем не из мира CGI-сценариев для традиционной гостевой книги.
Причиной подобной революции была чрезвычайная понятность средств РНР. Эта новая технология позволяла реализовать не только программу “Здравствуй, мир!”. Даже традиционно сложные процедуры, такие как интеграция баз данных, стали вполне реализуемыми всего лишь в нескольких строках кода.
Однако основная проблема заключается в том, что такая доступность стала быстро использоваться не по назначению. С одной стороны, это приводило к тому, что сложные приложения разрабатывались неопытными командами разработчиков. А с другой стороны, опытные профессионалы сознательно отступали от своих принципов и не могли устоять перед соблазном воспользоваться беспрецедентной простотой языка РНР.

Риск, связанный с подобными подходами к разработке, вполне очевиден. Такое “применение” языка РНР приводит к появлению приложений, которые очень неудобно поддерживать. Для таких “шедевров” хорошо документированы случаи неустойчивого и ненадежного функционирования и даже изъяны, связанные с нарушением безопасности.
Многие языки программирования, такие как Java и C++, вынуждают использовать правильные подходы к программированию в процессе выполнения проектов, однако для использования языка РНР от разработчиков требуется самодисциплина. Опытный PHP-профессионал отличается от кодера на диване одним важным качеством – самодисциплиной. Одним из наиболее значимых примеров подобной самоорганизации является методология, предполагающая использование шаблона “модель—вид-контроллер” (Model-View-Controller (MVC)).

Знакомство с архитектурой MVC

Буква М означает “модель” (model), V— “вид” (view) и С— “контроллер” (controller). Однако какой же смысл вкладывается в эти термины?
Модель MVC лучше всего описывается с помощью хорошо известного понятия “шаблон проектирования”. Шаблон проектирования (design pattern) — это описание многократно используемого решения повторяющейся проблемы в определенном контексте. Шаблоны проектирования предназначены для непротиворечивого решения проблем, которые возникают при проектировании крупномасштабных приложений. Наилучшего практического результата можно достигнуть лишь при использовании архитектуры, построенной на основе использования апробированных принципов.
Основная проблема заключается в том, как отделить друг от друга пользовательское управление программой (контроллер), ее внешний вид (вид), а также внутреннюю обработку и механизм принятия решений (модель). При этом нужно обеспечить их представление в виде трех определенных, отделимых друг от друга, компонентов. Как легко догадаться, решением этой проблемы является модель MVC. Однако зачем это нужно?
Во-первых, разделение влечет за собой возможность замены. Реализовав три от¬дельных компонента, можно обеспечить их непротиворечивое взаимодействие друг с другом. Кроме того, при необходимости любой компонент можно заменить. Например, если понадобилось, чтобы Web-приложение работало с карманными компьютерами, а не с Web-браузерами, можно заменить компонент “вид” на другой компонент, с помощью которого можно было бы представлять содержимое в формате карманного компьютера, а не Web-браузера. Если вы захотите обеспечить голосовой ввод данных, а не заставлять пользователей щелкать мышкой, можно заменить компонент контроллер” на другой компонент, основанный на средствах VoiceXML. Во-вторых, поиск трудноуловимых ошибок в коде, а также поддержка программы после ее передачи заказчику существенно упрощаются, если обеспечено рациональное разделение ее логики. При таком подходе оказывается полезным и объектно-ориентированное программирование, основы которого рассматривались в начале этой книги. Гораздо лучше иметь множество небольших компонентов, которые взаимодействуют друг с другом, чем небольшой набор больших, громоздких файлов. При таком разделении компонентов сложная архитектура программной системы становится гораздо более простой.
И наконец, для одной модели можно реализовать несколько контроллеров и компонентов представления. Вернемся к предыдущему примеру с карманными компьютерами при использовании архитектуры MVC можно реализовать отдельные контроллеры и компоненты представления для карманных компьютеров, мобильных телефонов и даже устаревших браузеров. Все эти компоненты могут взаимодействовать с одной и той же моделью. Без архитектуры MVC будет невозможно повторно И использовать разработанный код, и вы не сможете избежать дополнительных усилий и дублирования кода.

Как можно видеть, модель MVC – это очень полезный шаблон проектирования, который нужно стараться использовать везде, где только можно.

You can follow any responses to this entry through the RSS 2.0 feed.