Паттерн MVC в PHP/Joomla, что б он сдох!

11.04.2007

Для тех кто не знает, что такое MVC отправляю сюда. Если коротко, то это такой прием (у буржуев это назвывается pattern) программирования/проектирования при котором вся логика работы чего-либо делится на три этапа:

  • Модель
  • Вид
  • Контроллер

Логичнее было бы называть ее CVM или CMV, ибо на входе системы стоит Контроллер, который получает и обрабатывает все события. Модель делает какие-либо данные значимыми для пользователя или приемника информации. Т.е. грубо говоря хранить мы можем все что угодно, хоть данные о численности уток.

  • Контроллером может быть, в данном случае, код, обратывающий различные события, например событие, когда пользователь запрашивает статистику смертности уток от недоедания прошлым летом, или пользовать хочет узнать разницу численности уток и голубей в парке (в данном случае будет использована еще одна база данных). По сути Контроллер дает предпосылки изменения Модели или в случае web переводит браузерный POST-запрос в вызов функции языка PHP.
  • Моделью будет фукнция обсчета статистики, например находящаяся совершенно на отдельном, мощном сервере – что бы не загружать основной.
  • А Видом будет функция, получающая статистику из Модели и передающая ее либо в виде HTML-текста, либо в каком-нибудь внутреннем бинарном формате для обмена данными между зоолгическими станциями по разведению уток в разных регионах страны.

Кроме того, я не зря написал два варианта CVM или CMV. Прикол в том, что после получения события Контроллер передает его на вход Виду, а Вид уже запрашивает Модель. Так вот, весь фокус состоит в том, что когда Вид получает команду, он ничего не делает, а только вызывает Модель, т.е. по сути вторым значимым шагом является Модель, а уж потом Вид выдает в нужном формате то, что передала ему модель, по сути работая самым последним.

Так вот, несмотря на всю крутизну этой штуковины, я бы сильно испугался внедрять ее в Joomla, ибо это все-таки CMS, а не какая-то мощная распределенная система. И вот почему:

  • MVC изначально создавался для GUI штучек, но уж никак не для веба где один клик пользователя – это выборка или вставка в базу чего-нибудь.
  • Этот паттерн нужен для больших систем, где действительно необходимо разделять логику, иначе все кодеры нафик запутаются и все усложнится в сотни раз. Web это всегда работа с однородными данными, например, в каталоге недвижимости – это данные об квартирах и гаражах, даже хранящиеся в одной таблице, не то что базе данных. Я тут даже не вспоминаю о том дурацком качестве кода, которым страдают 80% расширений для Joomla.
  • Такое вот “разделение логики” приводит к сильному запутыванию кода. Всем известна стандартная структура компонента для Joomla. Так вот – если делать ее по-умному (по MVC’шному), то у вас резко возрастает куча бесполезного по сути кода, который нужен только для того, что бы это было “похоже на mvc”.
  • Сама CMS обрастает лишними килобайтами (десятками и сотнями) кода классов и функций, что в свою очередь помимо очередного увеличения дистрибутива (а в Joomla 1.5 это уже семь мегабайт!), ведет к замедлению работы и бОльшей нагрузке на сервер и интерпретатор php в частности.

Пользуясь случаем, хочется передать привет команде разработчиков Joomla, пожелать им здоровья и творческих успехов. А еще сильно хочется их попросить – не читать модные кодерские журналы по вечерам. И еще забыть о том, что php это серьезный язык программирования, а Joomla это самая крутая в мире CMS, которой без MVC никак не выжить.

Я могу их оправдать только в одном стремлении – надо избавляться от большой кучи кода, доставшегося от мамбы и до сих пор работающего под Joomla. Нужно сделать так, что бы выжили только качественные расширения, а MVC начинающим не под силу, они еще не разобрались с error_reporting и до сих пор думают, что register_globals это дыра.

У нас на специальности, я могу лишь предположить, что о словосочетнии “паттерны программирования” знают максимум два-три человека. А ведь вполне себе компьютерная специальность.


Комментирование этой статьи закрыто

Комментарии [15]

  1. Апр 12, 22:34 , alex_ez

    Да потому что php5 вышел ;)...
    А он на концепции ООМ.
    А она изначально использовалась в smalltalk.
    А он всеми руками за MVC.
    Да и грамотное разделение частей по обязанностям на этапе разработки – это большой +, нежели наоборот.

  2. Апр 12, 22:58 , Dead Krolik

    Нннет. Я ни в коем случае не против MVC как такового, я против внедрения этой штуки в web-приложениях.

    Относительно любой CMS можно сказать следующее – любая ее составная часть (не ядро) работающая как некоторая функция чего-то читающая/пишущая в базу данных по сути очень и очень ничтожна (по сравнению с серьезным софтом). Этой функции вполне хватит использования классов что бы разделиться на части. MVC это бесплезно, выигрыша не дает.

    P.S.Это нормально, что у вас сайт не открывает. Может очепятка какая?

  3. Июн 13, 20:47 , Шурик

    При читении статейки, вспоминаются другие на тему нужно ли ООП в ПХП. Мне кажется и то и другое приводит к порядку. Классы объединяют функции и данные, которые эти функции обрабатывают. МВЦ, соглашусь с alex_ez, разделяет обязанности между частями приложения. Врезультате разработчику будет проще разобраться и дописывать чужой проект (иногда такое случается). А нагрузка на сервер/интерпретатор зависит от реализации а не от подхода…
    (всем нравиться красиво написанный и комментированный код и никто не вспоминает о нагрузках на интерпретатор)

  4. Июн 13, 22:23 , Dead Krolik

    Отчасти вы конечно правы, красота это очень даже не плохо. С этим соглашусь. Но вот с нагрузкой – “ни за фто” :)

  5. Окт 13, 10:05 , flyGuy

    что register_globals это дыра.
    —-
    А вы с этим не согласны ?
    Вот приметивный пример опасности (если не тыкать в таких местах $arr=Array() вначале):

    Таким образом, добавив в ГЕТ свой массив, получим ХСС-инъекцию.

  6. Окт 13, 20:19 , Dead Krolik

    Это не пример опасности, это пример плохого стиля программирования. Просто PHP это такой язык, который позволяет не инициализировать переменные, а открыв же любой учебник программирования можно большими буквами увидеть совет “инициализируйте переменные”.

    И дело вовсе не в настройке. Да и кто же нынче пишет не при ERROR_REPORTING не равному E_ALL, только смелые люди, которые не боятся что смогу однажды написать вот такую вот опасную штуку.

    И получим мы не XSS, а просто уязвимость ну или потенциальную уязвимость, которая может станет дырой, а может и не станет, все зависит от кода.

  7. Ноя 19, 02:30 , iDownload

    Если вы считаете веб платформой исключительно для домашних страниц, сайтов визиток и прочего баловства – то тогда конечно никакой МВЦ не нужен…

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

  8. Ноя 23, 21:09 , alexey

    Для Джумлы как раз таки MVC и необходим, причем нормальный, а не такой как сейчас!

  9. Янв 31, 20:02 , Kotofeich

    Я тож против MVC, поскольку слишком много безмозглого кода появляется. К тому же он труднее в освоении. Примером безмозглости служит самый первый урок по joomla 1.5 – “привет мир”. Начинающие программеры врятли поймут что это вообще такое:)

  10. Апр 23, 07:03 , Sintez

    Дак вот и нефиг начинающим программерам в CMS лезть, да и вообще – переходите на Drupal :-D

  11. Июн 7, 17:42 , HeeL

    Sintez, заглянул на днях во внутренности последнего Друпала и был неприятно удивлен, каким образом организован код.

    В Joomla пока не смотрел, но думаю, что MVC там лишним не будет

  12. Июл 21, 04:48 , kandr

    Вопрос к php гуру, что из php опенсорса посоветуете посмотреть и использовать как базу для copy-paste? Что является образчиком стиля в мире php сегодня?

  13. Июл 21, 16:42 , Dead Krolik

    Уууу. Спросил. В сторону пхп при изучении mvc вообще не стоит смотреть. Java и любые умные книжки про паттерны. А пхп – само придет.

  14. Авг 19, 04:06 , Андрей Якушев

    Господин Мёртвый Кролик, вы правильно указали вашу профессию, вы действительно – заяц. И ничего больше.
    То что в вашей шараге никто не знает что такое паттерны проектирования ещё не значит, что такими же должны быть солидные люди – разработчики Jooml’ы.
    MVC проектировался как раз для Web’а, и только для него. Рекомендую ознакомиться с описанием MVC в работах Дмитрия Котерова и Зива Сураски. Или вы не знаете этих чудесных людей? Не читали? А вы программистом вроде бы назвались…
    Это очень удобно, что бы вы там не несли про “необходимость применения только в огромных системах” и т.д. Создаётся впечатление что вы Jooml’у ориентируете на создание страничек про любимых котят клиентов и только для этого.
    Печально видеть что о такой прекрасной CMS в Рунете пишут только зайцы и дохлые кролики. Из того хлама писанин про Jooml’у в рунете что я видел, внимания заслуживает только блог Котофеича, у этого человека наряду с расжёванной банальшиной ещё проглядываюся толковые и нужные статьи. А что я вижу у вас? Ничего профессионального. Только ничем не подтверждённый, не обоснованный и бездоказательный лепет про то как сложно теперь нам, быдлокодерам жить.
    Кстати, последний гвоздь в крышку вашего профессионального гроба – вы что не в курсе про самую большую узявимость Jooml’ы за всю историю? Вы не видели сотни поломанных сайтов?
    Знаете что обидно? Время не железное, и оно летит очень быстро. А мне в поисках достойных статей и аргументов, приходится тратить его и мой трафик попадая на такие вот студенческие дилетантские писанины как ваша. Только не надо вешать что вы там так много чего понаписали – я это всё читал. Любой мой подшефный программист за полторы-2 недели, не зная джумлы, с нуля разберётся и напишет куда лучше и грамотнее.
    Застрелитесь. Или идите работать сисадмином в продуктовый магазин.

    P.S. Удалить моё сообщение проще всего. А вот ответить за свои утверждения куда сложнее…

  15. Авг 19, 23:03 , Dead Krolik

    А конкретно вы к чему хотите придраться? Я заметил только одно – претензию к большим штукам. Вы, как мне кажется, на виртуальном хостинге 1.5 не запускали и 50 посетителей не вызывали приостановление аккаунта и гневные письма от хостера.

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

    “По понятиям” “за утверждения” я тут еще перед вами должен отчитываться. Вы конкретный перечень пожалуйста предоставьте этих утверждений. Помимо зайцев и кроликов. А то чего-то ваше красноречие застряло в животном мире.

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

    >Вы не видели сотни поломанных сайтов?
    Дак и что? Я 1.5 не пользуюсь и другим не советовал, вроде как. А вы что – воспользовались? И я виноват? Ой, что ж я наделал-то. Пойду застрелюсь от стыда. Прямо в оружейке бахну. Кровища, угрюмое лицо дежурного и ваша радостная рожа. Доброй ночи! :-)

Комментирование этой статьи закрыто

Кто я


Возраст: 23
Профессия: заяц


Категории


Полезные ссылки


Стишок

Зайчик-зайчик, скок-поскок!
Н-нна тебе дробину в бок!
Не с капустой же мы будем
Жрать на Новый год пирог...

eu-shestakov.livejournal.com