2008/09/25

МВЦ не существует!

Утверждение в заголовке звучит весьма резко и вызывающе, и многие сразу начинают с ним спорить.

На самом деле, это краткая форма более полного утверждения: «В настощее время на текущем этапе развития научно-технического прогресса, теории и практики алгоритмизации и программирования, реализация теоретического обоснования идеи MVC (Model-View-Controller Данные-Представление-Управление) в полной мере невозможна». Ещё раз: речь идёт о невозможности реализации, соответствующей теоретическему обоснованию идеи.
Возможны лишь некоторые приближения. После некоторых допущений.

А теперь по порядку:
а) МВЦ так и не имеет канонического описания. И каждый вправе думать про него что хочет.

б) МВЦ не имеет канонического описания по факту своего появления. Его придумали и начали использовать программисты Small Talk в программировании (исключительно!) пользовательских интерфейсов.

в) Причём, если мы будем фанатично следовать триразделённости МВЦ в проектировании приложений, забывая о пункте б), что часто бывает, может возникнуть примерно следующая ситуация:

предположим, контроллер получает сигнал о необходимости изменений представления данных, обращается в модель за данными, модель (как достаточно высокоуровневая система) обращается к подсистеме хранения данных. И, следуя идее МВЦ, обращается она к контроллеру подсистемы, который запрашивает собственную модель, и т.д. вглубь...

Это нереализуемая патовая ситуация.
Любой другой вариант является отклонением от исходного разделения и удаляет нас от МВЦ.

г) В свете вышесказанного особенно опасно говорить о МВЦ в приложениях, которые фактически не имеют тесной связи с клиентской частью. На мой взгляд, это все веб-приложения, за исключением, может быть, ява-апплетов.

д) Все виденные мною «реализации МВЦ» для пхп (все берут корни из phptemplates.org когда он был ещё жив; не ходите туда сейчас – там чей-то пустой блог) не являются МВЦ, это плохие эмуляции. Хотя бы потому, что классический МВЦ утверждает независимость трёх компонентов. Которая отсутствует в этих эмуляциях.

е) Даже полная «объектизация» языка программирования не помогает в реализации МВЦ.

Нет ничего плохого, если вы используете какой-либо из ранее найденных на просторах интернета шаблонов якобы МВЦ, или даже придумали свою реализацию %) Присмотритесь к ней внимательней, и вам захочется рефакторить её и рефакторить, и рефакторить, и рефакторить...

Не надо называть МВЦ то, что МВЦ не является.

На мой взгляд, о МВЦ нельзя думать как о шаблоне (pattern) реализации или разработки, и даже говоря о МВЦ как о шаблоне проектирования, не надо закладывать в схему (в проект) эти три буквы %) Лучше уж «проект пишем, МВЦ в уме».

Вот, кажется, и всё. Это из личного опыта и опыта виртуальных коллег.
Надеюсь, прочитанное вам поможет. Хотя, см. п. а)
зы: тоже польза http://phpclub.ru/talk/showthread.php?threadid=71560&highlight=mvc

зы2: статья основана на переписке с потенциальным работодателем. и полугодичных мытарствах с mvcговнопаттернами

лето 2007г

ps: http://angry-web.blogspot.com/2008/09/blog-post_26.html
blog comments powered by Disqus