Почему Zend Framework такой сложный?

42

Я веб-разработчик и имею опыт разработки нескольких веб-приложений на PHP. У меня есть идея разработать продукт для себя, и я решил использовать инфраструктуру на основе MVC, потому что мне действительно нравится идея MVC и то, как можно легко управлять и изменять приложение без каких-либо трудностей.

Я выбрал Zend Framework, и это кажется более сложным, чем изучение нового языка программирования. В одно время происходит так много вещей, что даже запускается небольшое приложение.

Точно так же идея маршрутизации очень сложна, поскольку она является новой для программиста ядра. Я знаю, что ребята здесь читают тысячи таких вопросов, как один, который я задаю, но я не собираюсь изучать Zend Framework за одну ночь. Я готов дать столько времени, сколько нужно, но до сих пор это не имеет для меня смысла. В библиотеке Zend есть тысячи классов, но как бы нуб узнал, где использовать специальный класс и как его использовать? Я все еще нахожу очень трудным для понимания начальной загрузки Zend Framework и его отображения. Я читаю руководство, следую ему, и все начинает работать, но я действительно не совсем понимаю, как они на самом деле происходят.

Я также до сих пор не знаю, как модели, представления и контроллеры работают вместе и как планировать приложение в Zend Framework. Когда дело доходит до основного php, у меня точно есть идея, что делать и чем легко перевести их в код, но в Zend Framework я не знаю, как перевести мою идею.

Умайр Абид
источник
10
Если вы новичок в MVC, внедрите леса MVC самостоятельно, прежде чем использовать какие-либо из них - они не годятся для обучения.
древовидный код
2
@greengit вот что я сделал!
Кайл Ходжсон
Zend Framework не сложен, ему нужно немного времени для изучения из-за плохой документации, но я могу вас заверить, что это очень мощный фреймворк. Мы создали крупное корпоративное программное обеспечение на ZF2, а гибкость в настройке необычайна для ZF.
albanx

Ответы:

38

Zend Framework это сложно. Он не был построен в качестве основы начального уровня, предполагается, что знание соответствующих концепций 1 . Тем не менее, первое требование к Zend Framework 2.0 - сделать его немного проще:

Облегчить обучение

В конце 2009 года мы провели опрос пользователей инфраструктуры, чтобы определить, что они используют, какие среды они используют и каковы их потребности. Главной проблемой, без исключения, была трудность изучения структуры. Некоторые из этих проблем включают в себя:

  • Сложность в «первый час» с рамками.
  • Неопределенность относительно «следующих шагов» после быстрого старта.
  • Несовместимые API в самом исходном коде. Один компонент может использовать «плагины», другой «помощники» и еще один «фильтры».
  • Неопределенность в отношении того, где существуют точки расширения и как их программировать.
  • Путаница в том, могут ли они использовать Zend Framework только в качестве стека MVC или в качестве отдельных компонентов.

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

Поскольку вы все еще учитесь, было бы гораздо ценнее создать собственную архитектуру MVC. Расмус Лердорф в пресловутом 2 « The No-рамка PHP MVC рамка » блог дает очень простой и чистый пример MVC с помощью процедурного PHP, без каких - либо рамок или другой библиотеки третьего лица.

Но если вы действительно хотите учиться с помощью фреймворка, вы должны рассмотреть микро-фреймворк вместо полноценного. Slim имеет очень маленькую, чистую и тщательно протестированную кодовую базу, и она должна быть идеальной для обучения. Я не играл ни с какими другими микро-фреймворками, вы должны провести собственное исследование и решить, какой из них лучше для вас.

И для быстрого и грязного введения в маршрутизацию, смотрите мой ответ на этот вопрос . Это не очень сложная концепция для понимания, но Zend Framework заставляет ее выглядеть намного больше, чем есть на самом деле .

1 Лучшее описание, которое я прочитал для ZF, это то, что это фреймворк для построения фреймворка , а не фреймворк приложения. Это сырая мощь, а экстремальный список функций не подходит для небольших и средних веб-сайтов. К сожалению, не могу найти, где я это прочитал.

2 Прочитайте заявление об отказе от ответственности в верхней части сообщения блога.


Обновление, вдохновленное комментарием @ Karpie:

Фреймворк не должен быть сложным, весь смысл фреймворка в том, чтобы сделать вещи проще. Вполне возможно, что даже с твердым пониманием концепций, ZF не подходит для вас.

При выборе фреймворка учитывается множество субъективных факторов, и если в любой другой фреймворке не хватает функциональности, которая вам абсолютно необходима - и вы не можете писать самостоятельно, вам следует избегать ZF и использовать фреймворк, который кажется вам более естественным.

Если вы знаете концепции, структура не должна мешать.

Яннис
источник
3
Даже со знанием концепций это чертовски сложно понять, и, честно говоря, я не думаю, что оно того стоит. Документация часто ошибочна, примеры в Интернете, как правило, устарели, канал поддержки IRC, как правило, мертв, и из того, что я видел, нет другого места, где можно получить поддержку.
sevenseacat
@ Karpie Честно говоря, мне это не так сложно. Но это отчасти идиоматично, поэтому определенно подходит некоторым разработчикам лучше других. Например, мне легче понять, чем CodeIgniter, но это только из-за моего личного процесса: я предпочитаю читать код, а не документацию, а код CI настолько полон дерьма, что мой разум отключается. Но для большинства разработчиков CI намного легче выучить, чем ZF, и не все согласны с тем, что код CI полон дерьма. Важно то, что фреймворк не должен быть сложным в использовании, если есть, всегда есть другие.
Яннис
Я считаю, что Zend Framework 1 относительно легко понять. Но вы сказали , что идея ZF2 было сделать его проще , я чувствую, что это гораздо более сложным , чем когда - либо прежде.
куплено777
Все в ZF2 слишком сложно. Было бы хорошо представить Zend "framework" как набор модулей / библиотек. Фактическая структура отсутствует. Здесь нет уровня модели, поэтому вы должны либо реализовать свой собственный, который обычно является беспорядком, либо использовать Doctrine, который требует некоторой интеграции. Чтобы написать какие-то модульные тесты, вам нужно потратить невероятное количество времени на расшифровку руководства и написание (или нахождение в сети) некоторого кода просто для начальной загрузки ваших тестов. Хотя это может быть построено вокруг здравых понятий, их интерпретация этих понятий ужасна.
vladko
11

Мне не понравилось отсутствие обнаруживаемости, когда я начал использовать Zend Framework, слишком много классов полагаются на массивы, и вам приходится искать, какие ключи вы можете / должны определить.

Нет ничего плохого в том, чтобы иметь четкие методы или именованные параметры, это, во всяком случае, помогло бы с обнаружением.

Структура Yii еще хуже с такими вещами.

DBlackborough
источник
3
+1 Моя важная причина, по которой всерьез не учитывается использование ZF / ZF2, должна быть в уродливых конфигурациях, основанных на автоматическом заполнении / подсказках и на основе смысла, уклоняющихся от вложенных массивов. Это нарушает мою личную неприязнь к чрезмерному использованию массивов в ОО-мире.
Гэвин Хауден
1
Точно мое мнение, а также.
Даниэль
Я не считаю Yii 1 слишком сложным. Может это для меня. : P
Юджин Джозеф
5

Некоторые проблемы с ZF, которые мешают (и трудным для начинающих) работать с:

ОРМ не входит . Можно было бы подумать, что это должно быть очень основой современной инфраструктуры MVC, но ZF только идет Zend_Db_Table, что является смехотворно низким уровнем. Вы можете использовать Doctrine, но тогда вы сами по себе, он никак не интегрирован с ZF.

Нечитаемые, раздутые URL-маршрутизаторы . Например, требуется 9 строк кода, чтобы определить самую простую маршрутизацию:

$route = new Zend_Controller_Router_Route(
    'archive/:year',
    array(
        'controller' => 'archive',
        'action'     => 'show'
    ),
    array('year' => '\d+')
);
$router->addRoute('archive', $route);

Учитывая количество вопросов, связанных с этим, это совсем не просто для большинства людей. Кроме того, я не могу с этим поделать и сравниваю это с Django, где эквивалент выше был бы

url(r'^archive/(?P<year>\d+)/$', 'archive.show')

Zend_AclЭто сложный способ для большинства случаев использования. Обычно у вас будет аутентификация для идентификации пользователя. И возможность легко ограничить доступ к некоторым контроллерам только для аутентифицированных пользователей. Для многих пользовательских случаев этого достаточно. В более сложном случае это будет зависеть от бизнес-логики в контроллере, чтобы определить, есть ли у пользователя разрешения на выполнение определенного действия. В ZF у вас нет возможности легко ограничить доступ только для аутентифицированных пользователей, стандартным способом является использование ACL и системы ролей, независимо от того, насколько просты ваши потребности на самом деле.

Раздутый каталог и файл макета . Рекомендуемая структура каталогов выглядит следующим образом:

<project name>/
    application/
        configs/
            application.ini
        controllers/
            helpers/
        forms/
        layouts/
            filters/
            helpers/
            scripts/
        models/
        modules/
        services/
        views/
            filters/
            helpers/
            scripts/
        Bootstrap.php
    data/
        cache/
        indexes/
        locales/
        logs/
        sessions/
        uploads/
    docs/
    library/
    public/
        css/
        images/
        js/
        .htaccess
        index.php
    scripts/
        jobs/
        build/
    temp/
    tests/
Vartec
источник
4

Zend Framework похож на кучу независимых библиотек, которые вместе работают как фреймворк. Очень сложно что-то разработать в то же время отделенное и «простое в использовании». Для «простого в использовании» я имею в виду делать сложные вещи с несколькими строками кода.

Итак, начинать с Zend сложнее, чем другие фреймворки, такие как CakePHP. Но я также легче расширяю и настраиваю ваше приложение без грязных кодов. Zend также следует стандартам и шаблонам проектирования по всему своему коду, поэтому, прочитав код фреймворка, вы сможете догадаться, что происходит.

Когда вы говорите, что понятия не имеете о том, как модели, представления и контроллеры работают вместе, пожалуйста, не вините фреймворк. Он реализует MVC, как и любой другой фреймворк, за исключением того, что он отделяет модель от структуры базы данных, которая во многих фреймворках реализована в одном и том же классе. Таким образом, вы столкнетесь с множеством классов, таких как Zend_Db_Table, Zend_Db_Table_Row, Zend_Db_Table_Rowset и т. Д ...

Вот почему я думаю, что Zend Framework более сложный, потому что он очень отделен, и вы можете использовать его классы в других проектах, которые не используют ZF.

gustavotkg
источник
3

Zend Framework требует определенных основ в ООП и шаблонах проектирования. Исходя из своего опыта, я нахожу только опытных программистов на Java-JEE-Struts-Spring, которые легко знакомятся с Zend Framework. Среднестатистическому разработчику PHP трудно усваивать концепции и архитектуру Zend Framework. Но смотри, эй! Zend Framework происходит от компании «Zend», которая создает PHP в первую очередь. Так что нужно подумать, может быть, если не уважение!

Рохит
источник
1
Расмус Лердорф создал php, Zend - большой сторонник php. Из того, что я помню.
Сармен Б.
Не могу не согласиться там. Я разработчик Java. Я не только легко нашел свой путь в ZF, но и предпочел его другим фреймворкам.
Jkushner
-2

Я считаю, что Zend просто усложняет ситуацию, MVC - это просто мошенничество, логически работающее как обычный PHP. но вы разрабатываете его перед MVC, как разделение файлов в разных каталогах.

Помните, что тот, кто говорит, что Зенд очень защищен и не способен взломать, - большой дурак. Zend также может легко взломать, если вы не использовали защиту от инъекций Mysql. Я хотел бы предложить вам определить ваши собственные функции, а затем разделить ваши файлы в разных каталогах, чтобы сделать их похожими, как MVC, сохранить ваши функции, классы и другие основные материалы в одном каталоге, называемом контроллером, а затем добавить ваши веб-страницы в другой каталог, где вам нужно чтобы включить все эти функциональные файлы, этот каталог будет известен как view. поместите ваши javascript и css файлы в разные каталоги, которые будут называться model.

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

PHP - это язык, который вы изучаете в книгах и у учителей. Zend - это не просто фреймворк, чтобы усложнить задачу для ваших клиентов. поэтому, когда клиенту понадобятся какие-либо изменения, он будет обращаться к настоящим разработчикам, и эти разработчики будут брать с вас больше денег. Zend защищен, все это просто ложь, такая простая ошибка, как простое кодирование php, может привести к взлому сайта.

Пуджа дхимбани
источник
-6

По крайней мере, «быстрый старт» должен быть проще для того, чтобы сделать фреймворк дружественным… если вы предпочитаете что-то более сложное, как лучшую вещь, то я бы сказал: «ZF - лучший PHP-фреймворк», иначе НЕ. Я скачал ZF-2 и опробовал его (честно говоря, я новичок в ZF). Печально то, что я до сих пор не нашел в интернете надежного «краткого руководства» с простым Project Skeleton. Все, что я ищу, - это простой способ включения библиотечных файлов и создания папки проекта с функциями MVC. Я использовал Codeigniter, Cake php, Yii, но нашел это довольно недружелюбным. Да, я знаю, что Zend обновляет PHP, но это не значит, что это лучший фреймворк или что бы вы ни говорили.

Баран
источник
продолжай не любить .... LOL
Ram