Что такое модульное программирование
Zend Framework, как и любой другой фреймворк, предоставляет возможности для модульного программирования. Модульное программирование — это такая техника программирования, когда разработка программы разбивается в несколько этапов, максимально независимых один от другого.
Например, сначала проектируется ядро приложения и воплощается в програмном коде, при этом учитывая возможность подключения модулей. Потом пишутся необходимые модули (отдельные части приложения, которые независят от других частей, а только минимально от ядра). В модулях программист воплощает необходимый ему функционал, который легко подключить к приложению.
Такая техника программирования позволяет программисту использовать уже готовые части приложения во многих проектах, экономя своё время и силы. Таким образом под каждого конкретного заказчика можно собрать специализированный пакет програмного кода, реализиющий весь нужный ему функционал.
Ярким примером подобной техники является известный файловый менеджер Total Commander, который буквально весь собран из отдельных модулей (плагинов).
Такой подход очень удобен и в веб-программировании для реализации собственной системы управления контентом.
Представте себе ситуацию: за несколько
лет работы Вы написали 50 сайтов в 40-ка из которых есть раздел
новости. Вам надоест переносить програмный код из CMS-ки в CMS-ку, тупо
вырезая его из одного проекта и вставляя в другой, при этом коректируя
код под проект.
Проще будет, например, скопировать каталог с модулем в определённую папку проекта и настроить модуль. Всё остальное сделает за Вас ядро системы. Нравиться?
Легче? Конечно легче! А если ещё и усовершенствовать данный пример, то «прицепить» какой-нибудь модуль будет вообще проще простого, а «выдирать» необходимый код из одного проекта и интегрировать в другой - большая трата времени.
Тем более, что модульная техника программирования позволит четко и прозрачно производить версионирование модулей, например, с помощью SVN (Subversion).
Итак, какие есть варианты? Я выскажу свою точку зрения и попрошу читателей активно поучавствовать в обсуждении данного материалла.
Мысли вслух. Легкий очерк проблемы
Построение модульной CMS-системы заключается в первую очередь в правильном её проектировании. Верно и грамотно спроектированое приложение — первый шаг к созданию успешного, ефективного и удобного програмного продукта.
Именно об проектировании подобных приложений и пойдёт речь, поскольку это самый важный этап разработки.
Очень часто программисты ошибаются при проектировании програмного дизайна системы, например, разбивают её только на два модуля «admin» и «default». Это недопустимо, поскольку влечет за собой массу неудобств и ограничений.
Нужно производить такое деление с учетом одного правила: каждый модуль должен умещать в себе функционал для работы и с админ-частью приложения, и для работы самого сайта. Модуль должен быть максимально унифицированной частью приложения, поэтому советую Вам использовать минимальную привязку к другим компонентам приложения.
Создайте, например, папку «modules» и размещайте Ваши модули именно в ней. Так Вам будет легче сделать процесс создания приложения более прозрачным.
Таким нехитрым образом мы стандартизируем процес построения модулей, а ядро системы будет «знать» что и как вызвать для получения нужного результата. «Но как же быть со скриптами вида?» — недоверчиво спросите меня Вы, — «Ведь каждый модуль должен иметь свой набор скриптов, поетому получается, что прийдётся скрипты вида править ручками».
Нет. Не прийдется! Решая этот вопрос, я много думал о разных вариантах решения, но ничего лучшего за Zend_Layout не нашел. Zend_Layout позволит построить дизайн нашего проекта на основе макетов, тоесть Вам нужно будет создавать один макет для проекта, а все остальные трудности решает грамотное использование CSS (построение CSS-фреймворка под проект).
Также для реализации глобальных вещей, таких как аутентификация, мы можем использовать Zend_Registry и хранить в нём наш объект, а уже каждый модуль будет сам иметь доступ к объекту аутентификации и будет с ним работать. Если еще взять во внимание возможность создания плагинов фронт-контроллера, то это вообще развязывает нам руки: мы можем управлять процессом диспетчеризации, например, подставляя в глобальные переменные нужные значения, меняя ход процесса диспетчеризации.
Думаю Вам следует обратить внимание и на помощник вида под названием «action»: он позволит «выдёргивать» Вам результат выполнения отдельных действий... Это наталкивает на полезные мысли.
С версии 1.6 в фреймворке появилась возможность создания роутеров для модулей, задав только папку, где лежат наши модули. Это функция фронт-контроллера addModuleDirectory(). Данная функция должна Вам очень пригодится.
... и напоследок
Мысли, варианты решений - мои собственные, поэтому если у Вас есть инные соображения или какие-то замечания, то пишите в каменты. Есть вопросы? Прекрасно, я с удовольствием отвечу.




