A (fond) farewell to Zend Framework — Перевод

в 22:38, , рубрики: php, Zend Framework, метки:

Прошу обратить внимание, что это перевод.

Я пользовался Zend Framework длительное время. Я пользовался PHP достаточно долго что бы понимать преимущества хорошего фреймворка, так же я разработал достаточное количество сложных приложений используя Zend Framework, что бы определенно полюбить его. Хотя Zend Framework имеет репутацию фреймворка с высоким порогом вхождения, медленного и черезчур усложненного — это незаслуженные обвинения. Откровенно говоря — есть в этом что-то привлекательное. Было, покрайней мере для меня. Думаю ZF 1.11 последняя версия фреймворка которую я буду использовать.

Почему? Ответ прост — это Zend Framework 2.0. Так или иначе разрабатываемый последние пару лет, было выпущено некоторое количество бета-версий и казалось, что финальный релиз не за горами, через пару месяцев. На данный момент мне надо принять решение о моем будущем с этим фреймворком, и мне не очень нравится то, что я вижу.

Будем честными в одном: я не буду утверждать что внес сколько-нибудь значимый вклад в разработку ZF 2.0. Вся моя критика в пределах моего личного мнения.

Тем не менее, я действительно не думаю, что многое из того, что я собираюсь сказать несправедливо, по одной причине: я пытался любить ZF 2.0. Конечно есть и други PHP фреймворки, мне не нужно их называть (вероятно речь о Symfony2 — прим. переводчика) и многие из них изначально лучше чем ZF (вероятно речь о ZF2 — прим. переводчика), что бы заниматься ними. Не смотря на все это, я был щастлив с ZF1 и действительно пришел к ZF2 c мыслью что, это не займет много усилий, что бы полюбить его. Но я не смог.

Многое из того, я думаю, что не так с ZF2 вы можете легко увидеть в приложении-примере ZendSkeleton. Конечно в наше время приложения-примеры для любых задач довольно убогие: в каждом JS фреймворке есть приложение «список дел». И задачи выбираются, что бы показать лучшие фичи фреймворка и выставить фреймворк в лучшем свете. Первым делом что поражает в приложении-примере ZendSkeleton: оно очень-очень тупое, но зато есть куча кода необходимого вам на тот момент. Огромное количество шаблонов необходимо, что бы продвинуться дальше чем ‘Hello World’, это невероятно и понастоящему Java-like.

Вобще-то я люблю когда мой фреймфорк упрямый. Я люблю культуру, люблю дух который пришел как набор принципов для разработчиков как самого фреймворка так и приложений на нем. ZF конечно и был и есть упрямый. Я полагаю на данный момент мое упрямство отличается от их упрямства (ZF1 и ZF2 — прим. переводчика) и это проблема.

Первое что я холел бы упомянуть — это внедрение зависимостей. Теперь я получаю DI по-настоящему. Мне даже нравится эта идея. Я вижу, как это полезно и как можно добавить кучу значений в проект. Но эта «полезная фича» это «паленая водка» (в оригинале “koolaid”, это ссылка на события в Jonestown в 1978 году, акт массового самоубийства en.wikipedia.org/wiki/Jonestown — прим. переводчика) и ID в ZF2 тревожно близок к последней. В качестве примера просто гляньте в модуль конфигурации ZendSkeleton.

От комментария в первой строчке у меня по спине пробежал холодок — “Injecting the plugin broker for controller plugins into the action controller for use by all controllers that extend it” (непереводимая игра слов — прим. преводчика). Да это же опять enterprise словечки, прошу прощения но звучит как Java.

И помере предполагаемого продвижения, для того что бы просто сконфигурировать простенькое приложение, пройдя зыбкую настройку роутинга и некоторые части настройки View, вы увидете штуку которая положила меня на лопатки — ‘ZendViewHelperDoctype’. Серьезно? Фрагмент view кода для управления doctype`ом. Как будто это то, что вы можете изменять находу? «Да, наши шаблоны на HTML5, но я могу откатится на HTML4, просто переключив...», спасибо, нет. Doctype полностью основополагающий для шаблонов которые вы написали. Это далеко от настроек приложение, и это не смешно.

Другая хрень которую я не могу терпеть: стандартная струкрура директорий. Думаете application/controllers/IndexController.php было достаточно плохо? Теперь у вас
module/Application/src/Application/Controller/IndexController.php Я понимаю причину, принудительное разбиение на модули, но ZF1 поддерживал модульность без принуждения.

Знаю сейчас читатели могут ответить: это демо-приложениею. Оно предполагает использование лучших подходов, ты можешь упросить и все сделать проще. Кроме… это не правда, тут уже много упрощений. Взгляните на layout: тут куча кода вверху шаблона. Неужели view предполагает что этот код должен быть там?! Я бы хотел что бы большая часть этого дерьма была в Bootstrap.php как было раньше. Я не могу поверить людям которые пропагандируют размещение этого в layout`е (я уверен они не пропагандируют). Но оно так есть, загромождение layout, в то время как это должно быть отрефакторено и вынесено в другое место.

Это проблема. Демо-приложение делает кучу вещей, которые ничего не делают кроме как выводят Twitter bootstrap на экран. Я конечно хочу, что бы было показано как эти начальные инвестиции окупятся в конце — но сейчас я не вижу этого. Чем больше я смотрю, тем больше я вижу вещей которые требуют все больше и больше кода для работоспособности — постоянные инвестиции в течение всего проекта, без видимых дивидендов позже. Как правило, если я использовал фреймворк, демо-приложение всегда выглядело хорошо, но реальное приложение становильсь более сложным и тяжелым. Люди Вещи не меняются, как правило они остаюются такими же. Боюсь что приложение на ZF2 взорвется морем классов, полностью непреодолимым для молодого разработчика, подкрепленным внедрением зависимостей, настолько абстрактных, что у него мало шансов понять их.

И это печально. ZF1 имел ряд недостатков, которые я думал будут пересмотрены в ZF2 и вероятно были пересмотрены. REST контроллеры в ZF1 были хороши, и видимо ZF2 имеет право на это. Слой работы с базой данных был хорош, в ZF2 он был улучшен. Пространства имен PHP конечно унылы, но ZF2 использует их, в них есть смысл и я вероятно научусь их любить. Но черт возьми, взгляните на «БыстрыйСтарт». Запомните, это руководство в стиле «Приступить к работе как можно быстрее» для людей которые знают язык и просто хотят начать эксперементировать.

Что плозого в нем? Чтож, в раздере 12.2.2 начало “если вы установили — давайте кодить”. Первый пункт списка? «Создайте вашу модель». Это включает скачивание демо-приложения, копирование и сообщения что все ОК. 12.2.3 обновите карту классов для автолоадера используя правильные неймспейсы, проверте что конфигурация включена и соответствует автолоадеру (давайте притворимся, что мы поняли что нужно сделать в этих пунктах).

12.2.4 создайте контроллер. О Боже я нехочу знать для чего ZendStdlibDispatchable или почему я могу выбрать REST контроллер, потому что в руководстве «Быстрый старт» не упоминается REST. Но не бойтесь, у нас есть базовый контроллер, он вылгядит примерно так:

namespaceController;

use ZendMvcControllerActionController,
    ZendViewModelViewModel;

class HelloController extends ActionController
 {
   public function worldAction()
     {
        $message = $this->getRequest()->query()->get('message', 'foo');

        return new ViewModel(array('message' => $message));
     }
  }

К сожеланию это снова напомнило мне, я ненавижу использовать Java-мир и все его шуточки. Например
этот-объект-и-этотметод-другой-объект-другойметод-действуй().

Я так хочу интресоваться ZF2, но это так далеко по космическо-корпоративно-промышленной архитектурной лестнице вверх, насколько, сколько я видел подъем PHP. И честно говоря, если бы я хотел програмировать на Java, я бы ипользовал Java. И тогда я бы скачал Play ( www.playframework.org — фреймворк под Jаva — прим. переводчика) или Scala и насладился бы ими. Но для PHP нет. Что ж, прощай ZF. Было приятно знать тебя.

Автор оригинала: Alex Hudson
Ссылка на оригинал: www.alexhudson.com/2012/03/24/a-fond-farewell-to-zend-framework

Автор: cystbear

Поделиться

* - обязательные к заполнению поля