Статьи
Портфолио
Друзья
Контакты

Последние статьи

06.07.2010 Memcache и Zend: у Вас "падает" Memcache? 4 коммент.

06.07.2010 Collabtive - web-based project management software 2 коммент.

03.06.2010 Ускоряем ZF-проекты: автолоад и сборка в один файл 2 коммент.

Все

Категории

PHP 2 стат.

Zend Framework 25 стат.

Javascript 3 стат.

Другое 12 стат.

Книги 1 стат.

Украина 1 стат.

Все

RSS

Статьи

Комментарии

Портфолио

Облако тегов

программирование  Программы  портфолио  php  zend framework  Zend_Db  Smarty  Zend_Form  паттерны  javascript  niceforms  jQuery  Zend_Mail  веб  Google  Zend_Rest  Zend_View_Helper  zend casts  Zend_View  Zend_Layout  speedUp  интернет  Загрузчик фотографий  Flash  ВКонтакте  zend  localization  zend_translate  gettext  антон шевчук  подарки  Я читаю  Книги  sphinx  релизы 

Все

Реклама



Статистика



Rambler's Top100

Главная > Статьи > Zend Framework > Модульное программирование в Zend Framework
14.09.08 Модульное программирование в Zend Framework

Что такое модульное программирование



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(). Данная функция должна Вам очень пригодится.

 

 

... и напоследок


Мысли, варианты решений - мои собственные, поэтому если у Вас есть инные соображения или какие-то замечания, то пишите в каменты. Есть вопросы? Прекрасно, я с удовольствием отвечу.

Теги:  zend framework, php, программирование

Другие категории:

■ PHP ■ Zend Framework ■ Javascript ■ Другое ■ Книги ■ Украина
Комментарии к статье
  Kupuyc

30.09.08 06:28:27

На правах "а можно еще". Класс Zend_Auth реализован как Singleton. Используя его хранилище по назначению можно отказаться от дополнительной обертки в виде Zend_Registry.

  illusive

30.09.08 06:51:40

Спасибо, Вы правы, я привёл неудачный пример... Я хотел показать читателю, что для каких-то глобальных вещей можно использовать Zend_Registry, конечно, если хранимый объект не Singleton

  Александр Махомет

29.10.08 10:12:34

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

P.S. Публиковать e-mail без защиты от сбора роботов не хорошо.

  illusive

29.10.08 10:15:46

2Александр Махомет

...проблемы с скриптами вида никакой нет...

Я имел ввиду именно универсальность скриптов вида, для переноса из проекта в проект. Я хотел добится такого:

  1. Написал скрипт вида по конкретному стандарту;
  2. При смене дизайна заменил только CSS-файл, а скрипты вида не тронул;
  3. Запустил проект в мир

Хотелось не менять скрипты вида на каждый дизайн.

Публиковать e-mail без защиты от сбора роботов не хорошо.

Спасибо за замечание. Поправлю

  Александр Махомет

29.10.08 13:36:42

Хм, вы хотите создавать произвольный дизайн путем только смены css? По моему такое реально только для не сложных стандартных блочных дизайнов. Любой же полет фантазии дизайнера не впишется в ваши стандарты.

Смена layout макета не такая уж сложная задача, а скрипты вида в целом можно попытаться стандартизировать и переносить из дизайна в дизайн. Но это опять же при простых дизайнах.

P.S. плохо что форма комментирования не запоминает Имя :)

  Александр Махомет

29.10.08 13:43:23

И с сортировкой комментов проблемы Смеётся

P.S. Луцку привет Смеётся

  illusive

30.10.08 07:59:40

Извините меня за эти неудобства. Я сейчас готовлю новый движок для блога и я надеюсь, что исправлю все недочеты и неудобства. Еще раз извините

 

  illusive

30.10.08 08:03:28

Сортировку поправил Невинность

 

  illusive

30.10.08 09:49:00

Хм, вы хотите создавать произвольный дизайн путем только смены css? По моему такое реально только для не сложных стандартных блочных дизайнов. Любой же полет фантазии дизайнера не впишется в ваши стандарты.

Смена layout макета не такая уж сложная задача, а скрипты вида в целом можно попытаться стандартизировать и переносить из дизайна в дизайн. Но это опять же при простых дизайнах.

Я с Вами вполне согласен, что экзотические или нестандартные дизайны сделать так не получится. Но если дизайны идут по определённому стандарту, то мои мысли вполне реальны....

 P.S. Луцку привет передал ;) Спасибо

  illusive

30.10.08 11:53:32

Теперь адрес электронной почты скрывается от спам-ботов ))))

  illusive

30.10.08 12:05:07

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

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

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

  Александр Махомет

30.10.08 13:23:25

Сразу оговорюсь, что я реализую основную логику маршрутеризации через плагин фронт-контроллера, в т.ч. применяю технику ЧПУ

Андрей, это все общие слова =)

Ждем нового года, дерзайте )

А форму таки научите помнить имя, и подписку на комментарии сделайте. Раз уж вы не используете вордпресс, то не заставляйте людей испытывать неудобства =)

  illusive

31.10.08 10:57:25

А форму таки научите помнить имя, и подписку на комментарии сделайте. Раз уж вы не используете вордпресс, то не заставляйте людей испытывать неудобства =)

 Извиняюсь за неудобства. На этих выходных постараюсь исправить Подмигивает

 Ждем нового года, дерзайте )

 Спасибо. Буду стараться

  rechik

08.03.10 00:19:04

zend предлагает свое решение: http://manual.zfdes.com/ru/zend.controller.modular.html

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

 
Статьи | Портфолио | Друзья | Контакты
Идея и мозги: Васильев Андрей © 2008-2010 Web-Blog Кисточка и фантазия: Зелинский Богдан