Почему 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 еще хуже с такими вещами.


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/

4

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

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

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

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.