Использование готовых решений в web-разработке
Введение
Одним из залогов успешного выполнения проекта, является правильное его проектирование. Творческое и свободное мышление являются очень полезными качествами для любого проектировщика, но как показывает практика, такое мышления часто приводит к изобретению очередного велосипеда. В итоге тратится много времени и сил на разработку инструментов и интеграцию их между собой, а также на отладку их правильной работы. И чаще всего такие решения являются не самыми лучшими в своём роде, в ближайшем будущем они требуют переделок или, что ещё хуже, «забивания костылей» (то есть, исправления кода, противоречащего всяким законам хорошего стиля программирования).
Но есть другой подход к проектировке. Уже на данном этапе (и на всех проектировочных этапах реализации проекта) есть возможность выбрать наиболее подходящие готовые решения для разработки продукта. Здесь также есть свои тёмные стороны:
· иногда готовые решения работают не совсем в той логике, к которой привык разработчик
· иногда в готовых решениях встречаются неотловленные (и трудноотлавливаемые) ошибки
· иногда разные готовые решения имеют плохую интеграцию между собой (или вообще таковой не имеют)
Но в любом случае применение готовых решений может существенно сократить время разработки и увеличить её эффективность, а также качество конечного продукта. В этой статье будут рассмотрены некоторые типы готовых решений, применяющихся в web-разработке, а также будут даны подробные их примеры (но они были подобраны исходя из личных предпочтений, серверный язык php, клиентский javascript, база дынных MySQL).
Готовые решения для разработки web-приложений
Framework
Ситуация: мы начинаем писать приложение на голом серверном языке (естественно, думая, что никто кроме нас его лучше не напишет). Постепенно оно разрастается, и мы начинаем встречаться с подобными трудностями:
· Интегрировать новые модули и затачивать их под свой движок становится всё сложнее и занимает это непростительно много времени (если мы их вообще интегрируем, не будем говорить о той ситуации, когда разработчик ВООБЩЕ не прибегает к помощи готовых модулей)
· Мы понимаем, что делаем раз за разом те же самые операции, которые до нас делало множество человек
· Моя проектировка приложения оказывается не достаточно актуальной и мощной
А чтобы избежать подобного, перед разработкой любого web-приложения стоит рассмотреть, нельзя ли применить для этого один из фреймворков. Серверный фреймворк – это каркас для нового web-приложения, который не только обладает набором встроенных библиотек и большим количеством уже разработанных модулей, но, что самое главное – он задаёт направление мысли программиста и ставит его в некие рамки. Вот некоторые из фреймворков на php:
· Symphony
· Zend Framework
· CodeIgniter
· Kohana
Возьмём, к примеру, замечательный фреймворк Kohana. Вот некоторые из его особенностей:
1. Паттерн MVC (всё приложение разбивается на модели, виды и контроллеры)
2. Система чистых ссылок (пути вида www. *****/bar/foo)
3. Набор библиотек и хелперов для выполнения наиболее распространённых для web-приложений операций. (redirect, ответ на ajax-запрос, xss-фильтрация, работа с сессиями и т. д.)
4. Мощная модульная структура, а также каскадная файловая система (если в двух разных модулях есть два одинаковых файла в идентичных директориях, то подключен будет файл из модуля, подключённого позднее)
5. Встроенный профайлер
6. Локализация
7. Встроенные ORM и query builder (библиотеки для объектно-ориентированной работы с базой данных)
8. Система событий
9. И ещё многое другое
CMS
Двигаемся дальше: мы выбрали framework и работаем теперь на нём (разрабатывая в данном случае достаточно стандартное web-приложение). Но у нас опять же возникают проблемы:
· Framework не заточен под управление контентом. Не умеет работать с картой сайта. Не имеет таких понятий как «материал», «меню», «хлебная крошка» и тому подобных
· Интегрировать новые модули всё ещё сложно. Приходится разбираться в тех тонкостях модуля, которые не являются для нас необходимыми. Всё ещё нужно конфигурировать их перед использованием
· Хорошую административную панель самому сделать очень сложно (тем более программисты редко понимают, что такое хороший user-frendly интерфейс)
· Клиенты недовольны, что для любого малейшего изменения на сайте (которое мы не предусматривали) приходится либо лезть в код, либо звать разработчика
Выходом из такой ситуации является использование готового решения заточенного специально под наши нужды. Если нам приходится иметь дело со стандартным web-приложением, то сложно найти лучшее решение, чем CMS – систему управления контентом. Она реализует такие вещи, как: управление картой сайта, категоризация материалов, разграничение доступа пользователей к различной информации, быстрая смена вида (шаблона) сайта, локализация, более тесная интеграция модулей, функциональная и удобная административная панель и другие.
Вот некоторые из самых распространённых CMS на php:
· Joomla
· Typo3
· MODx
· Drupal
Одной из самых гибких и многофункциональных CMS на php является Drupal, вот некоторые из её достоинств:
1. Практически любой контент на сайте можно представить универсальным типом «материал»
2. Материалы не привязываются жёстко к какому-либо узлу на карте сайта
3. Система таксаномии (очень гибкой категоризации материалов)
4. Любой набор из материалов может быть выведен в любой узел карты сайта на основе таксаномии (а также на основе любых других полей при наличии модуля Views)
5. К материалам можно добавлять дополнительные поля (расширение cck, к примеру, если у нас есть тип материала «товар», то мы можем добавить к нему поле «цена»)
6. Гибкая и мощная система API
7. Интеграция с jQuery (фреймворк под javascript)
8. Автоматическая локализация модулей
9. Удобная локализация контента
10. Русскоязычное сообщество
11. Огромное количество готовых модулей
12. И МНОГОЕ другое
Другие готовые решения для разработки web-приложений
Ещё есть множество готовых решений, типа: форумов (например, phpBB), социальных сетей, интернет-магазинов, блогов. Выбирайте и пользуйтесь на здоровье (психическое в первую очередь).


