CMF от российских программистов
Вопрос о том, что лучше, рыба или удочка, такой же вечный, как и вопрос о яйце и курице. Здесь каждый выбирает по себе. И MZZ Framework предназначен для тех web-разработчиков, которые выбирают удочку, а не рыбу.
Касательно создания сайтов, в последнее время можно услышать множество диаметрально противоположных мнений о тенденциях. Одни говорят, что сейчас наиболее востребованы типовые шаблоны сайтов и простые CMS, другие считают, что, напротив, сложность проектов увеличивается, и нужны всё более гибкие и универсальные средства для построения сайтов. Сложно сказать, кто прав больше. Думаю, дело в том, что каждый смотрит, что называется, со своей собственной кочки и не видит картины в целом. Думаю, поскольку действительно у каждого сайта свой уровень требований к средствам, которые применяются для его разработки, то и различные средства разработки будут востребованы разными разработчиками при создании различных сайтов.
В общем-то, конечно, не факт, что вам вообще потребуется CMS или CMF. На том же PHP вполне можно создать какой-нибудь не сильно "навороченный" сайтик и с помощью стандартных средств и библиотек языка, и при этом конечный результат имеет немалые шансы удовлетворить заказчика. Однако всё же более частой является ситуация, когда возникает необходимость в применении каких-то готовых решений или хотя бы "полуфабрикатов" подобных решений. Почему? Во-первых, это может существенно сэкономить ваше время. Заказчики же, как правило, мало интересуются тем, сколько лично вашего кода в готовом проекте - им главное, чтобы всё работало безукоризненно. Это самое коварное "безукоризненно" и есть во-вторых: как правило, сторонние решения отлажены лучше, чем код, который написал программист самостоятельно, а потому это ещё один плюс использования CMS'ов и CMF'ов. Ну а в-третьих, сейчас использование чего-то подобного стало уже, пожалуй, даже чем-то вроде правила хорошего тона. Безусловно, написанная собственноручно библиотека или CMS, используемая в масштабных проектах, очень хорошо влияет на репутацию разработчиков, что также отражается на заработках... Но написание своей CMS может сказаться на них и в худшую сторону: на неё уйдут силы, которые могли бы уйти на сам сайт, и в итоге сайт получится некачественным. Поэтому нужно рассчитывать свои силы и не браться за те задачи, которые могут оказаться попросту неподъёмными.
Однако, в общем, пожалуй, пора уже приступать к рассказу об MZZ Framework - очень интересном CMF от российских разработчиков. Только сначала пару слов о том, что же такое, собственно говоря, эта самая CMF собой представляет. Расшифровывается этот термин как Content Management Framewok, то есть фреймворк для управления контентом. Русские варианты терминов framework (каркас) и content (содержимое) среди web-разработчиков как-то не прижились, а потому я буду употреблять кальку с оригинальных английских слов. Чем CMF отличается от CMS (Content Management System - система управления контентом)? В общем-то, чёткой грани между этими терминами нет, но под CMF понимают обычно удочку, а под CMS - ведро с рыбой. То есть, с помощью CMF вы сможете написать собственную CMS, а вот наоборот уже будет нельзя. Правда, существуют такие CMF, которые предоставляют возможности готовых CMS, и MZZ Framework как раз к ним и относится. Впрочем, давайте обо всём по порядку.
Найти MZZ Framework в Интернете весьма просто, поскольку у него есть официальный сайт, адрес которого запомнить проще простого: mzz.ru. Сайт полностью русскоязычный, и, соответственно, документация по MZZ Framework, расположенная на нём, тоже целиком написана именно на русском языке. Может, конечно, это и мелочь, но, думаю, большинству разработчиков будет приятно, что можно не вникать в трудности и хитросплетения английских фраз, написанных индусами, а получить простую и понятную документацию на языке, который большая часть жителей нашей страны считает родным. Там же может быть загружен, конечно же, и сам фреймворк. Также на сайте действует форум, на котором можно задавать вопросы и оставлять пожелания разработчикам. Сам сайт, кстати, если верить тому, что на нём написано, работает тоже на MZZ - думаю, это не самая плохая рекомендация для этого фреймворка.
Вот сейчас немного запоздалое предупреждение: дело в том, что MZZ Framework - проект не сказать чтобы совсем уж зрелый. То есть он, конечно, уже вышел из младенческого состояния и оброс функциональностью, но номер его версии не перевалил даже через единицу. Тем не менее, судя по живому форуму проекта и по тому, что для скачивания доступны ночные сборки фреймворка, не всё так плохо в Датском королевстве. Wine вообще десять лет шёл к первой версии, может быть, авторы MZZ Framework'а тоже считают, что быстрое увеличение номера версии не к лицу серьёзному проекту.
MZZ Framework написан для PHP 5 и имеет в своём арсенале средства для решения многих актуальных задач сайтостроительства. В качестве лицензии, под которой распространяется этот фреймворк, его разработчики выбрали GNU Lesser General Public License (LGPL). То есть, говоря по-русски, вы можете использовать MZZ Framework и в коммерческих, и в некоммерческих проектах. Что касается структуры самого фреймворка, то его авторы посвятили в документации целый раздел (довольно-таки большой по объёму) философии своего проекта. Там говорится, что "огромным монолитным модулям, содержащим большой объём кода и предоставляющим конечному пользователю (и, конечно же, программисту) огромный и зачастую совершенно ненужный функционал, мы предпочитаем много мелких модулей, каждый из которых умеет делать хоть и не много, но зато качественно". Что ж, в принципе, подход очень хороший, тем более опробованный временем на POSIX-системах. Так что, думаю, пользователи MZZ Framework'а будут по большей части в глубине души линуксоидами.
Душа и сердце фреймворка MZZ - это шаблоны. Именно на них, в конечном счёте, и будет опираться web-приложение (сиречь, динамический сайт), который вы планируете с помощью этого фреймворка разработать. В качестве обработчика шаблонов используется Smarty - широко известный движок шаблонов для PHP. Конечно, с одной стороны, если шаблоны так важны для MZZ Framework'а, то его разработчики могли бы и сами написать движок для них, однако, если вы помните, выше я приводил аргументы в пользу использования сторонних решений в своих проектах. Думаю, это очень правильно, что разработчики MZZ Framework'а предпочли не изобретать, что называется, велосипед, а воспользовались мощным и проверенным решением Smarty.
Шаблоны в MZZ бывают двух видов: активные и пассивные. Конечно, такая терминология выглядит довольно своеобразно, однако, на самом деле, разве уж столь принципиально, как именно называть типы шаблонов? Как написано в документации к фреймворку, на один запрос пользователя может быть запущен лишь один активный шаблон и любое количество пассивных шаблонов. Шаблоны - это, фактически, клиентский код, управляющий отображением данных для пользователя в рамках MVC (Model-View-Controller). И в терминах MVC шаблоны будут именно view-частью.
Но, конечно же, не одними шаблонами жив этот фреймворк - ведь мы, в конце концов, используем PHP, до мозга костей объектно-ориентированный язык программирования. Вполне естественно было бы предположить, что в состав MZZ Framework'а входят и определённые классы этого языка, которые помогут в быстром написании своего web-приложения. В общем-то, эти предположения не просто имеют под собой основу - они ещё и оправдываются. В MZZ есть ряд классов, которые сделают работу над web-приложением более простой. Я перечислю основные из них и расскажу об их предназначении.
Класс toolkit предназначен для того, чтобы получать необходимыe для работы экземпляры классов - как говорят разработчики, его можно назвать своеобразным глобальным хранилищем для различных объектов. Класс httpRequest имеет говорящее само за себя имя - он позволяет обращаться к параметрам запросов и может быть получен из toolkit. Комплементарный для него, если можно так выразиться, класс httpResponse используется аналогичным образом, только уже для работы с параметрами ответов сервера - например, для записи чего-нибудь в cookies. Класс routers предназначен для маршрутизации. Какой именно? Вот что на эту тему говорят разработчики MZZ Framework'а: "Маршрутизация (Routing) - это процесс разделения запрошенного URL на ассоциативный массив с помощью правила (route) при совпадении пути из URL с ним". Фактически, этот класс позволяет использовать для своего сайта "красивые" URL вида example.com/node/subnode/item. Класс resolver предназначен для упрощения процесса подключения URL к файлам, часть которых передана в качестве единственного аргумента в методе resolve(). Класс arrayDataspace используется для внутреннего хранения данных, как альтернатива свойств классов, а класс frontController определяет имя необходимого активного шаблона на основании запроса пользователя.
Теперь стоит, как мне кажется, сказать несколько слов про ORM в MZZ Framework'е. ORM расшифровывается как Object-Relational Mapping. Это технология, позволяющая автоматизировать процессы записи и считывания информации о свойствах объектов из реляционной базы данных. На практике эта технология применяется очень и очень часто, и для различных языков программирования существуют различные фреймворки, которые позволяют программистам реализовывать поддержку баз данных в собственных приложениях. Поскольку использование баз данных (особенно реляционных) в современных приложениях имеет не просто большие, а прямо-таки вселенские масштабы, то вполне логичным кажется решение создателей MZZ Framework'а встроить поддержку ORM в своё детище.
ORM в MZZ Framework'е, как говорят его разработчики, построен на базе The Data Mapper Pattern. В контексте этого паттерна рассматриваются два рода объектов: маппер и доменный объект (вот и ещё одна калька с английского). Доменный объект - контейнер для данных, маппер - класс для заполнения доменного объекта данными и их (данных) модификации. Для привязки объектов к данным используются MAP-файлы, в которых описывается то, каким образом объекты (вернее, сведения о них) будут храниться в базе данных. Структура MAP-файла в MZZ Framework'е напоминает структуру INI-файла (что, в общем-то, довольно-таки странно, поскольку обычно используются какие-нибудь специфические XML-диалекты). Документация по написанию MAP-файла и применению ORM в своих проектах на сайте фреймворка достаточно подробная, поэтому дальше углубляться в детали я не буду.
Отдельно стоит сказать пару слов о хранении в базе данных прав пользователей. Данные о правах пользователей хранятся в нескольких специально предназначенных для этого таблицах в базе данных, которую использует для своих нужд web-приложение. Работа с правами пользователей очень проста, а все не определённые права подчиняются трём очень простым правилам, информацию о которых можно найти на сайте MZZ.
Что ж... Хотя, конечно, ещё не всё рассказано об MZZ Framework'е из того, что можно было бы о нём рассказать, думаю, пора закругляться. Всё-таки, и размеры газетной статьи имеют определённые ограничения, да и не все читатели осилят статью объёмом с "Войну и мир". Давайте подведём итоги. Несмотря на свою сравнительную молодость, MZZ Framework является интересной и перспективной разработкой, вполне готовой для использования в реальных проектах. Серьёзным плюсом является наличие русскоязычной документации, а также русскоязычного сообщества пользователей этого фреймворка, с которыми можно пообщаться на форуме, расположенном на официальном сайте этого программного продукта. Думаю, если вы найдёте время, чтобы лично познакомиться с практическим использованием MZZ Framework'а, то вряд ли пожалеете о том, на что его потратили.
Вадим СТАНКЕВИЧ
![Версия для печати Версия для печати](https://www.kv.by/sites/all/modules/print/icons/print_icon.png)
Горячие темы