Ответ 1
Самое замечательное в Zend Framework заключается в том, что это использование по-воле, что означает, что вы можете использовать один компонент, или вы можете использовать их все. Большинство компонентов также очень гибкие либо через конфигурацию или расширение (наследование или композицию, при этом ZF благоприятствует последнему).
Zend Framework MVC чрезвычайно гибкий... даже до такой степени, что многие обвиняют его в том, что он слишком сконструирован или раздувается. Это субъективно.
Конечно, вы, вероятно, не захотите использовать Zend Framework для простой формы контакта; однако нет ничего, что помешало бы вам использовать Zend_Mail и Zend_Form без Zend MVC/Application. Имея в виду гибкость, в настоящее время нет единой методологии, которая рекламируется как лучшая с точки зрения организации приложения в модулях. Это задача, которую лучше всего оставить разработчику.
Это подводит нас к учебнику под рукой. У учебника есть стратегия для повторного использования. Это хорошая вещь; однако есть некоторые недостатки в его подходе.
-
Библиотека на модуль.Это не обязательно плохо; однако в большинстве случаев это не обязательно. Давайте рассмотрим, какие у нас есть варианты, если такая структура необходима по какой-то причине.
а. Создайте общую библиотеку (вы, скорее всего, уже это сделаете), смените имена (псевдо, если < 5.3 или фактические пространства имен, если >= 5.3).
б. Используйте собственный "Автозагрузчик ресурсов", http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html
ПРИМЕЧАНИЕ. Я лично не использовал автозагрузку ресурсов. Однажды, когда я его использовал, я обнаружил, что могу просто перенести эти элементы в свою библиотеку. При этом для этого есть использование. Кажется, он блистает, когда вы планируете смешивать и сопоставлять модули по проектам или для распространения. ZF2 обратится к этому менее опасным способом IMHO.
-
Базовые контроллеры для повторного использования. Опять же, повторное использование велико; однако Zend Framework предоставляет лучшие альтернативы контроллерам подкласса (наследования). Во-первых, здесь есть некоторые причины НЕ использовать наследование контроллера:
а. Хранение вещей DRY потерпело поражение, когда у вас есть несколько модулей, которые достаточно различаются, чтобы иметь базовый класс для каждого модуля, но функциональность копируется/вставляется в каждый класс базового контроллера модуля.
б. Трудно управлять унаследованными свойствами, поскольку сложнее визуализировать, какие унаследованные функциональные возможности используются каждым контроллером/действием.
с. С PHP, допускающим только наследование одного класса, вы вносите свой единственный шанс в наследство здесь - используйте это только в том случае, если не осталось других опций
Альтернативы
а. Плагины переднего контроллера Используйте их, когда функциональность/логика должна выполняться при каждом запросе независимо от модуля/контроллера/действия
б. Помощники действий Как уже упоминалось в проекте ZF, "они являются встроенным механизмом в Zend Framework, позволяя вам расширять ваши контроллеры действий таким образом, чтобы использовать состав вместо наследования". Нет ничего, что вы можете сделать в контроллере, который вы не можете сделать с помощью помощника действий. Используйте их, когда функциональность должна выполняться на каждом контроллере и/или основе действий.
Итак, был ли пример в учебнике чрезмерно спроектирован? Не обязательно; однако он, безусловно, является кандидатом на неправильно спроектированный, поскольку он относится к передовой практике и положениям, предоставленным Zend Framework.
Мне нужно немного отвлечься и обсуждать термины, надстроенные и раздутые на мгновение
Когда кто-то скажет вам, что что-то переработано и/или раздутое без указания контекста, пожалуйста, возьмите его с солью.
Статья в Википедии - http://en.wikipedia.org/wiki/Overengineering читает частично "... когда продукт более надежный или сложный, чем необходимо для его Приложение...".
Таким образом, когда вы ссылаетесь на что-то, как Over-developed/bloated, нужно быть осторожным, чтобы квалифицировать контекст или приложениепод рукой. Заявки на одеяло следует брать с солью и в большинстве случаев не принимать вообще. Это похоже на высказывание чего-то типа "Я бы никогда не использовал" Циркулярную пилу "для деревообработки, так как у нее слишком много функций, и эти функции меня путают". Конечно, этот инструмент может быть слишком убит для небольших домашних проектов; однако, поскольку это супер гибкий, вы будете счастливы, что у вас есть этот инструмент, когда вы окажетесь в ситуациях, когда вы никогда не думали, что найдете себя.
Да, веб-фреймворки наиболее перегружены для простого CRUD-приложения, такого как страница контакта или даже простое приложение для ведения блогов. К сожалению, большинство веб-фреймворков используют пример блога в качестве своего вводного примера - идите в цифру.
Дополнительные сведения:
-
Если вы хотите переключать макеты на основе модуля/контроллера/действия, вы можете написать плагин Front-Controller. Просто позвоните "Zend_Layout:: startMvc" и передайте ему имя макета и путь.
-
Переключение фактического представления script на основе заголовка Accept (или URL-адреса или заголовка X-HTTP-METHOD-OVERRIDE) может быть выполнено с помощью помощника действий контекстного переключателя (присущего Zend Framework) - http://framework.zend.com/manual/en/zend.controller.actionhelpers.html
-
Не стесняйтесь передавать экземпляр модели в помощник действия. Вы также можете настроить свои помощники действий с настройкой из бутстрапа. Таким образом, нет необходимости хранить вещи в глобальном реестре, который является просто прославленной глобальной переменной. Это скрытая зависимость, которая вам не нужна. Для лучшего повторного использования вы можете создавать свои собственные собственные подключаемые ресурсы, расширяя Zend_Application_Resource_ResourceAbstract - http://framework.zend.com/manual/en/zend.application.core-functionality.html#zend.application.core-functionality.resource-resourceabstract