Паттерн MVC в PHP/Joomla, что б он сдох!
Для тех кто не знает, что такое 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]
-
Да потому что php5 вышел ;)...
А он на концепции ООМ.
А она изначально использовалась в smalltalk.
А он всеми руками за MVC.
Да и грамотное разделение частей по обязанностям на этапе разработки – это большой +, нежели наоборот. -
Нннет. Я ни в коем случае не против MVC как такового, я против внедрения этой штуки в web-приложениях.
Относительно любой CMS можно сказать следующее – любая ее составная часть (не ядро) работающая как некоторая функция чего-то читающая/пишущая в базу данных по сути очень и очень ничтожна (по сравнению с серьезным софтом). Этой функции вполне хватит использования классов что бы разделиться на части. MVC это бесплезно, выигрыша не дает.
P.S.Это нормально, что у вас сайт не открывает. Может очепятка какая?
Июн 13, 16:47 , Шурик
При читении статейки, вспоминаются другие на тему нужно ли ООП в ПХП. Мне кажется и то и другое приводит к порядку. Классы объединяют функции и данные, которые эти функции обрабатывают. МВЦ, соглашусь с alex_ez, разделяет обязанности между частями приложения. Врезультате разработчику будет проще разобраться и дописывать чужой проект (иногда такое случается). А нагрузка на сервер/интерпретатор зависит от реализации а не от подхода…
(всем нравиться красиво написанный и комментированный код и никто не вспоминает о нагрузках на интерпретатор)-
Отчасти вы конечно правы, красота это очень даже не плохо. С этим соглашусь. Но вот с нагрузкой – “ни за фто” :)
Окт 13, 06:05 , flyGuy
что register_globals это дыра.
—-
А вы с этим не согласны ?
Вот приметивный пример опасности (если не тыкать в таких местах $arr=Array() вначале):Таким образом, добавив в ГЕТ свой массив, получим ХСС-инъекцию.
-
Это не пример опасности, это пример плохого стиля программирования. Просто PHP это такой язык, который позволяет не инициализировать переменные, а открыв же любой учебник программирования можно большими буквами увидеть совет “инициализируйте переменные”.
И дело вовсе не в настройке. Да и кто же нынче пишет не при ERROR_REPORTING не равному E_ALL, только смелые люди, которые не боятся что смогу однажды написать вот такую вот опасную штуку.
И получим мы не XSS, а просто уязвимость ну или потенциальную уязвимость, которая может станет дырой, а может и не станет, все зависит от кода.
-
Если вы считаете веб платформой исключительно для домашних страниц, сайтов визиток и прочего баловства – то тогда конечно никакой МВЦ не нужен…
Однако почему-то все больше и больше бизнес процессов со сложнейшей бизнес логикой перетекают из десктопных приложений именно в веб… а вот тут без МВЦ ни-ку-да.
Ноя 23, 17:09 , alexey
Для Джумлы как раз таки MVC и необходим, причем нормальный, а не такой как сейчас!
-
Я тож против MVC, поскольку слишком много безмозглого кода появляется. К тому же он труднее в освоении. Примером безмозглости служит самый первый урок по joomla 1.5 – “привет мир”. Начинающие программеры врятли поймут что это вообще такое:)
Апр 23, 03:03 , Sintez
Дак вот и нефиг начинающим программерам в CMS лезть, да и вообще – переходите на Drupal :-D
-
Sintez, заглянул на днях во внутренности последнего Друпала и был неприятно удивлен, каким образом организован код.
В Joomla пока не смотрел, но думаю, что MVC там лишним не будет
Июл 21, 00:48 , kandr
Вопрос к php гуру, что из php опенсорса посоветуете посмотреть и использовать как базу для copy-paste? Что является образчиком стиля в мире php сегодня?
-
Уууу. Спросил. В сторону пхп при изучении mvc вообще не стоит смотреть. Java и любые умные книжки про паттерны. А пхп – само придет.
Авг 19, 00:06 , Андрей Якушев
Господин Мёртвый Кролик, вы правильно указали вашу профессию, вы действительно – заяц. И ничего больше.
То что в вашей шараге никто не знает что такое паттерны проектирования ещё не значит, что такими же должны быть солидные люди – разработчики Jooml’ы.
MVC проектировался как раз для Web’а, и только для него. Рекомендую ознакомиться с описанием MVC в работах Дмитрия Котерова и Зива Сураски. Или вы не знаете этих чудесных людей? Не читали? А вы программистом вроде бы назвались…
Это очень удобно, что бы вы там не несли про “необходимость применения только в огромных системах” и т.д. Создаётся впечатление что вы Jooml’у ориентируете на создание страничек про любимых котят клиентов и только для этого.
Печально видеть что о такой прекрасной CMS в Рунете пишут только зайцы и дохлые кролики. Из того хлама писанин про Jooml’у в рунете что я видел, внимания заслуживает только блог Котофеича, у этого человека наряду с расжёванной банальшиной ещё проглядываюся толковые и нужные статьи. А что я вижу у вас? Ничего профессионального. Только ничем не подтверждённый, не обоснованный и бездоказательный лепет про то как сложно теперь нам, быдлокодерам жить.
Кстати, последний гвоздь в крышку вашего профессионального гроба – вы что не в курсе про самую большую узявимость Jooml’ы за всю историю? Вы не видели сотни поломанных сайтов?
Знаете что обидно? Время не железное, и оно летит очень быстро. А мне в поисках достойных статей и аргументов, приходится тратить его и мой трафик попадая на такие вот студенческие дилетантские писанины как ваша. Только не надо вешать что вы там так много чего понаписали – я это всё читал. Любой мой подшефный программист за полторы-2 недели, не зная джумлы, с нуля разберётся и напишет куда лучше и грамотнее.
Застрелитесь. Или идите работать сисадмином в продуктовый магазин.P.S. Удалить моё сообщение проще всего. А вот ответить за свои утверждения куда сложнее…
-
А конкретно вы к чему хотите придраться? Я заметил только одно – претензию к большим штукам. Вы, как мне кажется, на виртуальном хостинге 1.5 не запускали и 50 посетителей не вызывали приостановление аккаунта и гневные письма от хостера.
Ну и о личности моей всякое понаписали. Нагадили, насрали, а в конце еще и ПС оставили, мол смотрите какой я умный, и чего могу дописать. Типа выше всех. Ну так и летайте, я же вам крылья не обрезаю.
“По понятиям” “за утверждения” я тут еще перед вами должен отчитываться. Вы конкретный перечень пожалуйста предоставьте этих утверждений. Помимо зайцев и кроликов. А то чего-то ваше красноречие застряло в животном мире.
И изучали бы вы мвц по статьям Котерова, я вам мешаю что ли. И статьи про джумлу искать бессмысленно - самому надо сесть, посидеть денек и все будет хорошо. Мой блог - он для меня, а не для угрюмых знатоков, меня оскорбляющих. И переводящих на личность какие-то свои профессиональные заморочки. Проще надо быть. Отличайте факты и эмоции. Иначе вы ребенок, не умеющий себя контролировать.
>Вы не видели сотни поломанных сайтов?
Дак и что? Я 1.5 не пользуюсь и другим не советовал, вроде как. А вы что – воспользовались? И я виноват? Ой, что ж я наделал-то. Пойду застрелюсь от стыда. Прямо в оружейке бахну. Кровища, угрюмое лицо дежурного и ваша радостная рожа. Доброй ночи! :-)
2008-10-11 3:18 am , Оставьте свой отзыв