На правах рекламы

Шукалка

CMS, CMF и фреймворки

Вторник, 19 января 2010 г.
Рубрика: Бизнес в сети
Метки: |
Просмотров: 7804
Подписаться на комментарии по RSS

Продолжим тему начатую в статьях Бизнес в Интернете и веб-сайты и Становимся специалистами.

Здесь я хочу изложить свое понимание некоторых терминов, которыми пользуются веб-программисты. Хотел сказать, что собираюсь внести ясность, но нет, это будет именно мое понимание, так как есть некоторая путаница в этих терминах и нередко гарницы между понятиями несколько размыты, а каждый конкретный программист зачастую придает им свой оттенок. Вот я сейчас и придам этим понятиям свой wink

Итак, движки - в моем понимании это наиболее общее понятие, которое обозначает основу программной части сайта. К движкам относятся системы управления содержанием или контентом (Content Management System - CMS), каркасы или фреймворки управления содержанием (Content Management Framework - CMF) и, собственно, фреймворки или каркасы веб-приложений (Web Application Framework - WAF). В наименьшей степени к движкам можно отнести библиотеки и шаблонизаторы.

Библиотека - один или совокупность программных файлов, которые содержат классы и функции, выполняющие какую-то определенную задачу, например, соединение с базой данных, обработка XML-документов или отправка почты. Библиотеки подключаются к основным программным файлам и могут включаться в состав движка.

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

Далее, что касается CMS, CMF и WAF (или просто фреймворк) вносят наибольшую путанницу, вероятно, это связано с тем, как они завоевывали популярность в массах. Замечу сразу, что специальных исследований по истории развития движков я не проводил - это мой субъективный взгляд на ситуацию. Сначала появилось много различных CMS, и они становились все популярнее среди пользователей. Потом появились фреймворки для веб-приложений (WAF), которые набирали свою популярность в среде программистов, так как в отличие от CMS не предоставляли для пользователей готового интерфейса для работы. Следующим шагом была попытка некоторых из разработчиков CMS приблизить по гибкости свои системы к фреймворкам, т. е. по сути можно сказать, что они предоставляют каркас для будущего сайта, но уже с готовой админкой и некоторыми встроенными средствами, доступными рядовому пользователю. Такие CMS стали называться CMF, хотя по сути они очень далеки от тех фреймворков, которые WAF - это как раз и вносит наибольшую путаницу, поскольку в обиходе, когда говорят слово "фреймворк", чаще всего подразумевают именно WAF, хотя само слово присутствует и в одной, и в другой аббревиватуре.

К наиболее известным CMF можно отнести TYPO3, MODx, Drupal, Joomla и т. д., а к наиболее популярным фреймворкам: Zend Framework, CodeIgniter, symfony, CakePHP и др. В качестве подтверждения моей версии приосхождения понятия CMF, я хотел привести ситуацию на сайте MODx: modxcms.com - аббревиатура CMS заложена в само доменное имя сайта, тогда как в шапке сайта они написали "Content management framework", т. е. CMF. Однако же со временем эта надпись почему-то исчезла с шапки сайта (хотя встречается ниже по тексту), а в заголовке сайта мы можем прочитать "Content management system, framework, and more" - вероятно споры о том, чем является данный движок велись и в самой среде разработчиков, что привело к появлению такого компромисного заголовка... Впрочем, возможно, это SEO-оптимизаторы настояли, чтобы в заголовке была более раскрученная фраза. Вобщем, пора дать свое определение этим понятиям.

CMS - это движок сайта, предоставляющий определенный набор стандартных возможностей, таких как, прежде всего, ввод и управление содержимым сайта, а именно содержимым статических страниц, содержимым меню сайта, ленты новостей, реже блогов с комментариями. Иногда CMS бывают узко-специализированные, вроде тех же блог-движков или интернет-магазинов. Форум - другой пример узко-специализированной CMS. В CMS, как правило, включают один или несколько типовых дизайнов, называемых темами или скинами.

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

Да, вы не ослышались, CMF - с моей точки зрения фреймворком не является или является им весьма условно. Поскольку в принципе, любая CMS является неким каркасом для будущего сайта, а именно это понятие, является переводом английского слова "framework". Вот взять, например, Wordpress - этот движок был и остается CMS и не пытается себя позиционировать фреймворком, в то время сколько различных не-блоговых сайтов было построено на нем, благодаря его унифицированности работы и принципов взаимодействия с шаблонами и плагинами разработчиков, просто не счесть. Даже в моем портфолио есть одна такая работа (www.mnspolt.gov.ua). Где грань? На мой взгляд, фреймворк - это нечто иное, а именно:

Фреймворк - каркас будущего сайта или веб-приложения, представляющий собой в самом простом варианте набор библиотек и минимальных правил их взаимодействия, обычно выраженных в виде документации, но иногда частично заложенных в ядре фреймворка. Иногда фреймворки также включают в себя некоторые средства для ускорения разработки, называемые скаффолдингом, которые представляют собой автогенераторы файловой структуры приложения, некоторых рутинных участков кода, структуры базы данных и прочее. Отмечу также, что фреймворки в своей реализации обычно воплощают так называемые паттерны проектирования. Данный термин выходит за рамки этой статьи, но скажу лишь, что важнейшим из них для веб-разработчика является паттерн MVC, который предполагает разделение данных (модели), логики (контроллера) и дизайна (представления) веб-приложения. Если быть более точным, то к модели относится и весь код по извлечению и сохранению этих данных в их хранилище, не обязательно это сервер БД. А к представлению относятся шаблоны и шаблонизаторы, ответственные за представление данных в различных форматах.

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

И хотя в некоторых современных CMS и особенно CMF гибкость достигает немалых высот, все же порог вхождения для разработчика может оказаться достаточно высок из-за огромного числа всевозможных настроек в админ-панели. Другим недостатком продвинутых в плане универсальности движков является та цена, которую они платят за свою универсальность, а именно - быстродействие. Сразу на ум приходит движок Wordpress, который предоставляет достаточно обширные возможности по расширению и видоизменению функционала сайта, но по мере его расширения превращается в невероятного тормоза.

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

Мой выбор. Это целая история, которая еще не закончилась wink Начинал, я как и большинство веб-разработчиков с изучения статического HTML, чуть позже я пытался писать сайты отдельными PHP-скриптами (одна страница - один скрипт). Потом прошел эру CMS/CMF, но окончательно разочаровавшись, я понял, что ни одна из них полностью не сможет удовлетворить мои потребности в гибкости и быстродействии. Началась эра фреймворков. Сейчас я более менее изучил CodeIgniter, делаю на нем некоторые проекты (childrenet.com и др.), но поиск оптимального фреймворка еще не закончен. Сейчас смотрю на CIEX и Kohana.

Еще иногда на выбор влияет целесообразность... точнее она влияет всегда, просто не каждый проект есть смысл писать с нуля, используя фреймворк. Иногда неплохо иметь для быстрой реализации тех или иных задач некоторую CMS. На данный момент, такой CMS для меня является Maxsite, отчасти по той причине, что он написан на CodeIgniter, что дает некоторые возможности по использованию самого фреймворка внутри CMS.

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

Основныи критериями хорошего фреймворка я считаю:

  • легоксть и быстродействие, соблюдение принципа KISS
  • низкий порог вхождения, простота и качественная документация
  • наличие скаффолдинга, генератора БД и файловой структуры (если она изначально не задана)
  • наличие ORM или AR конструтора запросов для упрощения работы с SQL
  • возможность организовывать работу с layout'ами
  • модульность вроде HMVC или как в Kohana, а лучше нечто среднее

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

Комментариев: 3

  1. В целом выбор правильный. Все серьезные проекты делаются на фреймверках. Zend Framework не смотрели?

  2. Смотрел. Я с ним не подружился. Хотя сейчас бы уже думаю смог бы осилить, но неприятный осадок от первой попытки остался... Очень неудобоваримая документация, которая есть лишь алфавитный справочник, без вводной части. И дока заведомо предполагает определенный уровень знаний программиста в области паттернов проектирования... Лично я по мере общения с различными программистами (с форума phpforum преимущественно) убеждаюсь, что очень многие вообще не знают, что это за паттерны такие и о MVC даже не слышали...

  3. А я таки пишу свой FW smile Познакомился с ZF. Здорово, конечно, но очень массивно. Иногда до безумия. Документация огромна и тем самым отталкивает. Какие-то простые вопросы требуют перечитывать страницу за страницей. Русская документация... лучше бы ее вообще не было, не было бы соблазна ее читать. Она устарела до нельзя.

    Реализовал пару проектов на ZF и пока отказался от него. В большинстве случае - это стрельба по воробьям из пушки. Писать крупный проект на ZF - тоже бред. Любой действительно крупный проект проще сделать с нуля, используя библиотеки (пусть даже из того же ZF, но только библиотеки, а не весь фв).

    Нравится CI. Отличный минимализм. Самое то, что требуется для быстрой разработки типовых проеквто.

    Но свой велосипед все равно изобретаю. Хочется иметь промежуточный вариант. Мне кажется, у меня сравнительно неплохо получается. Может быть, я не зря этим занялся и получится удобный, пусть и не для всех, инструмент средней сложности...

    Если интересно, пишите, поделимся идеями smile

    Пишите либо в блог http://inroot.ru/

    Или на форуме CI. Я там под логином 0mm smile

Оставьте комментарий!

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

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)