Powered by CodeIgniter

Разработка

(21)
17
17 голосов
Разработка новой версии cogear. Прямой эфир с места событий.
Файловая структура cogear 2Продолжаем вводную часть второго cogear. Сегодня речь пойдет по файловой структуре.
Правильная организация внутренних компонентов позволяет сделать расширяемой и легко обновляемой. Когда я слышу удивленное «Как, ты работаешь с Wordpress?», всегда улыбаюсь, потому что большая часть холиваров возникает на пустом месте. Я работаю с теми системами, которые мне интересны, и бытие мое как автора cogear совершенно не препятствует мне делать сайты на других системах. Исследуя их, я нахожу сильные и слабые стороны, и как следствие, видение идеального движка расширяется и трансформируется на разных стадиях.
В процессе разработки cogear2 выбор пал на синергию занимательных концепций в веб-программировании:
  • Пространство имен классов и автозагрузка. Zend Framework
  • Мультисайтовость. Drupal
  • Концепция «слоеного пирога». Kohana
О том, как три указанных особенности переплелись друг с другом в новом когире, мы с вами и поговорим.

Пространство имен классов и автозагрузка

Эпоха PHP-функций include и require канула в лету с пришествием автозагрузки. Всем известно, что данные функции тормозят и отягощают любой скрипт. Автозагрузка вошла в мир PHP-кодинга с версией языка 5.1.2 вместе с SPL (Standart PHP Library), о которой мы неоднократно будем беседовать в ближайшем будущем.
В чем ее суть? В момент инициализации объекта из класса по-очереди запускаются зарегистрированные через функцию spl_autoload_register методы, которые получают на входе имя вызываемого класса. Внутри же методов, назначенных на автозагрузку, мы можем самостоятельно выстроить логику подключения файлов, и расходы на внутренние включения будут в разы меньше, чем при открытых инклудах в контексте программы.
В Zend Framework реализована отличная идея совмещения автозагрузки с пространством имен файлов.
Вызывая объект класса, к примеру, Zend_Config_Yaml скрипт заменяет нижнее подчеркивание на разделитель директории, дописывает на конце расширение исполняемого файла .php и ищет от корня папки с фреймворком файл Zend/Config/Yaml.php. Причем внутри файла сам класс носит точно такое же название — Zend_Config_Yaml.
Стоит заметить, что потенциально здесь есть возможность использования пространства имен, доступные начиная с версии PHP 5.3, но для совместимости с большей частью машин, работающих на PHP 5.2, мы выбрали схему Zend Framework, дополнив и расширив ее. См. концепцию «слоеного пирога».

Структура второго cogear


Мультисайтовость

Цели и задачи были поставлены следующие:
  • Хранение ядра, общего набора шестеренок отдельно от конфигурации конкретного сайта.
  • Создание сколько угодно большого количества сайтов на одной установке движка.
  • Простота обновления сущности движка, без ущерба для привязанных к ней сайтов.
Наиболее удачное решение подобных задач продемонстрировано в Drupal, который и при написании первой версии cogear вдохновлял своей продуманностью, но огорчал высоким уровнем вхождения в круги разработчиков.
Обратите внимание, что все папки заданы в index.php константами, что рождает бесконечное число вариаций на тему, где могут быть расположены
  • Ядро
  • Библиотека Zend Framework
  • Папка с шестеренками для всех сайтов
  • Папка для сайта по-умолчанию
  • Папка для текущего сайта

Чем удобно данное решение? Представьте, вы решили создать массовый блогохостинг. Ядро выносится за пределы установки, ровным счетом как и Zend Framework. Также вы можете вынести в специальное место папку с шестеренками для всех сайтов (базовый комплект), а в папку под конкретный сайт переместить папку с шестеренками. Можно реализовать любой удобный вариант, даже тот, который живет в первой версии cogear.
Для наглядности нарисовал иллюстрацию:

Примеры вариантов файловой системы

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

Концепция «слоеного пирога»

Здесь, где встречаются Zend Framework, Drupal и Kohana, и начинается самое интересное.
Включаем воображение, трансляция пошла.
Вызываем класс MyFirst_Gear, который символично ведет нас к первой создаваемой шестеренке. Автозагрузчик преобразует его в путь MyFirst/Gear.php и начинает поиск шестеренки. Тут-то и начинается самое интересное.
Сначала он идет в папку с шестеренками текущего сайта, потом с общими шестеренками, а потом в ядро.
Еще разок, шестеренки сайта → все шестеренки → ядро.
Загружен будет первый найденный класс.
Таким образом вы можете переопределять компоненты движка на любом уровне.
Хотите расширить базовое представление о шестеренке User? Не вопрос, можете создать точно такой же класс шестеренки в папке своего сайта, а еще лучше — отнаследоваться от нее и подменить переменную движка $cogear->user собственным улучшенным классом во время инициализации шестеренки. О таких удобных ходах расскажу в следующих статьях.

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

Тема следующего урока звучит так: «Шестеренка — наше все» или «Все есть шестеренка».

Хорошего дня!
17:36 ← 25 января 2011 Отправить в Твиттер adminadmin  RSS comments 35

Комментарии (35) ↓

inetlover inetlover time 18:19 ← 25 января 2011 #
Я в первой версии движка до сих пор нахожу моменты которыми сильно восхищаюсь.

Все описанное — классно придумано, но лично я смогу по достоинству все оценить только тогда, когда начну разбирать движок.

Ждем продолжения!
Автор
admin admin time 18:28 ← 25 января 2011 #
Вторым можно восхищаться целиком, без моментов! :-)
satagik satagik time 22:53 ← 25 января 2011 #
Это уж точно!
cellophan cellophan time 20:24 ← 25 января 2011 #
Описка в заголовке последнего подраздела публикации «Концепция «соленого пирога»». Насколько я понял имелось в виду "слоеного пирога".
Автор
admin admin time 20:38 ← 25 января 2011 #
Все верно, спасибо за поправку.
firestar firestar time 22:46 ← 25 января 2011 #
соленый пирог это конечно мощно
satagik satagik time 22:54 ← 25 января 2011 #
а почему и нет? :-)
Автор
admin admin time 23:08 ← 25 января 2011 #
Нет, соли нам не надо так много :-)
BerikIushi BerikIushi time 23:08 ← 25 января 2011 #
описочка — Концепция «соленого пирога»
Graid Graid time 23:28 ← 25 января 2011 #
Рад что разработка движка продолжается!
Хотел бы для себя прояснить несколько моментов.
Что будет если несколько популярных шестеренок будут переопределять к примеру модель $cogear->user, смогу ли я отдельно изменить регистрацию $cogear->user->register(не дублируя остальной код модели)?
Работа с формами, шаблонизатор будет по принципу первой версии движка? Если память не изменяет большая часть шаблона была непосредственно в коде.
По моему логичнее jQuery перенести в библиотеки.
Автор
admin admin time 00:15 ← 26 января 2011 #
Формы и шаблонизатор уже усовершенствованы и еще сильнее будут.
По поводу наследования предлагаю подумать самостоятельно.
asiliok asiliok time 15:49 ← 26 января 2011 #
а будет возможность перевести с лайвстреет все на ваш новый двиг?
Автор
admin admin time 16:04 ← 26 января 2011 #
Напишем конвертеры со всего, что только возможно.
Ramir Ramir time 16:58 ← 26 января 2011 #
Хотелось бы пощупать, уже.
andipas andipas time 17:15 ← 26 января 2011 #
Да, что нужно чтобы посмотреть код cogear 2?
Зарегистрировался в dev.cogear.ru/ там обсуждения только по cogear one.
Freem Freem time 17:44 ← 26 января 2011 #
andipas andipas time 17:52 ← 26 января 2011 #
403

У Вас нет прав для посещения данной страницы.
Freem Freem time 17:53 ← 26 января 2011 #
Значит вы еще не подтверждены, ждем админа.
Автор
admin admin time 21:45 ← 26 января 2011 #
Подтвердил.
Lone Lone time 22:00 ← 26 января 2011 #
Хочется больше социальных плюшек. Так как на движках BuddyPress и Dolpin7 CMS.
Автор
admin admin time 01:48 ← 27 января 2011 #
Dolphin ужасен и монструозен :-) Как-то списывался с русскоговорящим участником команды разработчиков, и он со мной в этом согласился.
Там мега-каша вместо кода.
Да, мы будем ориентированы на социальные сервисы настолько, насколько возможно. Это входит в стратегию развития системы.
Lone Lone time 08:48 ← 27 января 2011 #
За последние пару дней попробовал много CMS. Понравилась идея BuddyPress с возможностью зафолировать(как в твиттере) друзей, то есть наблюдать за их активностью.
Автор
admin admin time 12:19 ← 27 января 2011 #
Такая фича планируется.
Автор
admin admin time 12:20 ← 27 января 2011 #
BuddyPress — это надстройка над WordPress. Сдается мне, что для реализации хоть сколько-нибудь объемного сообщества понадобятся БОЛЬШИЕ мощности.
Lone Lone time 12:24 ← 27 января 2011 #
Да Вы правы, я подключил несколько плагинов к нему и памяти стало не хватать. Поэтому снес ее к чертям…
Isildien Isildien time 23:38 ← 26 января 2011 #
Может не много не в тему, во 2 версии будет переработан шаблон админки? Уж очень в 1 версии он не удобный и не красивый
satagik satagik time 00:26 ← 27 января 2011 #
Будет.
satagik satagik time 00:30 ← 27 января 2011 #
Автор
admin admin time 01:49 ← 27 января 2011 #
Это старый вариант, не вводи людей в заблуждение.
Isildien Isildien time 13:11 ← 27 января 2011 #
А можно посмотреть на новый? :)
Автор
admin admin time 14:28 ← 27 января 2011 #
Всему свое время.
Isildien Isildien time 15:07 ← 27 января 2011 #
Хорошо, будем ждать…
satagik satagik time 14:31 ← 27 января 2011 #
Сори, не знал…
Isildien Isildien time 18:53 ← 28 января 2011 #
А когда новая статья будет? :)
Автор
admin admin time 19:29 ← 28 января 2011 #
Сел, пишу.