Zend Framework为什么如此复杂?


42

我是Web开发人员,并且具有使用PHP开发多个Web应用程序的经验。我有为自己开发产品的想法,并决定使用基于MVC的框架,因为我真的很喜欢MVC的想法,以及如何轻松地管理和修改应用程序而没有任何困难。

我选择了Zend Framework,这似乎比学习一种新的编程语言更加困难。即使运行一个小型应用程序,一次有很多事情要做。

同样,路由的想法非常复杂,因为它对于核心程序员来说是新的。我知道这里的人读过成千上万个这样的问题,就像我问的那样,但我不想在一夜之间学习Zend Framework。我愿意根据需要提供尽可能多的时间,但是直到现在,这对我来说还是没有意义的。Zend库中有成千上万个类,但是菜鸟怎么会知道在哪里使用特定类以及如何使用它?我仍然很难理解Zend Framework的引导程序及其映射。我阅读了该手册,按照手册进行操作后,事情就开始起作用了,但是我确实并不完全了解它们的实际情况。

我仍然不知道模型,视图和控制器如何协同工作以及如何在Zend Framework中计划应用程序。当涉及到核心php时,我心中确切知道该怎么做,而不是轻松地将它们转换为代码,但是在Zend Framework中,我不知道如何转换我的想法。


10
如果您不熟悉MVC,请使用任何成熟的MVC支架之前先实施一个MVC支架-它们不利于学习。
treecoder 2011年

2
@greengit这就是我所做的!
凯尔·霍奇森

Zend框架并不难,由于文档不良,需要花费一些时间来学习,但是我可以向您保证,它是一个非常强大的框架。我们在ZF2上构建了大型企业软件,并且配置的灵活性在ZF中非同寻常。
albanx

Answers:


38

Zend Framework很难。它不是作为入门级框架构建的,而是假设您对所涉及的概念有所了解1。也就是说,Zend Framework 2.0第一个要求是使其变得更简单:

缓和学习曲线

在2009年末,我们对框架用户进行了调查,以确定他们使用什么,使用什么环境以及他们的需求。最重要的问题是,学习框架困难。其中一些问题包括:

  • 困难在于“第一个小时”的框架。
  • 快速入门之后的“后续步骤”不确定。
  • 源代码本身中的API不一致。一个组件可以使用“插件”,另一个可以使用“助手”,而另外一个可以使用“过滤器”。
  • 扩展点存在的位置以及如何为它们编程的不确定性。
  • 他们是否只能将Zend Framework用作MVC堆栈或作为单独的组件而感到困惑。

因此,不仅仅是您,每个人都很难-阅读整个Wiki页面,有很多事情被认为是不必要的复杂。但是,即使满足了上述要求,它也不会成为入门级框架,这意味着它不是您应该学习的框架,而是在您真正理解所涉及的概念时应该使用的框架。

由于您仍在学习中,因此构建自己的MVC架构将具有更大的价值。Rasmus Lerdorf臭名昭著的2无框架的PHP MVC框架 ”博客文章通过过程PHP提供了一个非常简单干净的MVC示例,而没有涉及任何框架或其他第三方库。

但是,如果您真的想学习框架,则应该考虑使用微型框架而不是全面的框架Slim具有非常小巧,干净且经过全面测试的代码库,对于学习而言,它应该是理想的选择。我没有玩过其他任何微型框架,您应该进行自己的研究,然后确定哪个更适合您。

有关路由的快速又肮脏的介绍,请参阅这个问题的回答。这不是一个很难理解的概念,但是Zend Framework确实使它看起来比实际要多得多

1我为ZF阅读的最好的描述是,它是框架构建框架,而不是应用程序框架。它的原始功能和极端的功能列表不适合中小型网站。不幸的是找不到我在哪里读。

2阅读博客文章顶部的免责声明。


更新来自@Karpie的评论:

一个框架并不难,一个框架的全部目的是使事情变得容易。即使扎实地掌握了所涉及的概念,ZF也不适合您。

选择框架时涉及很多主观因素,并且除非所有其他框架都缺少您绝对需要的功能-并且不能自行编写,否则应避免使用ZF,而应使用对您来说更自然的框架。

如果您了解这些概念,那么框架就不会妨碍您。


3
即使掌握了这些概念,也很难进入,老实说,我认为这样做是不值得的。该文档通常是错误的,在Web上的示例通常过时之后,IRC支持渠道通常已经失效,从我所看到的情况来看,没有其他地方可以得到支持。
sevenseacat 2011年

@Karpie,老实说,我觉得这并不难。但这是一种习惯用法,因此它绝对适合某些开发人员。例如,我发现它比CodeIgniter更容易理解,但这仅是因为我的个人过程:我更喜欢阅读代码,而不是文档,而且CI的代码太烂了,我的想法停了下来。但是对于大多数开发人员而言,CI比ZF更容易学习,并且并非所有人都认为CI的代码充满了废话。重要的是,如果存在一个框架,那么框架就应该很难使用。
yannis 2011年

我发现Zend Framework 1相对容易掌握。但是您说过ZF2的想法是使它变得更容易,我觉得它比以往任何时候都要复杂。
2012年

ZF2中的所有内容都过于复杂。可以将Zend“框架”作为模块/库的集合来呈现。实际的框架丢失了。没有模型层,因此您要么必须自己实现(通常是一团糟),要么使用Doctrine(需要一些集成)。要编写一些单元测试,您需要花费大量的时间来解密手册并编写(或尝试在线查找)一些代码,以引导您的测试。尽管它可能是围绕合理的概念构建的,但他们对这些概念的解释却很糟糕。
vladko '16

11

当我开始使用Zend Framework时,我不喜欢缺乏可发现性,太多的类依赖于数组,因此您必须查找可以/需要定义的键。

拥有明确的设置方法或命名的参数并没有什么错,imo将在帮助发现方面大有帮助。

Yii框架在这种情况下甚至更糟。


3
+1我不认真考虑采用ZF / ZF2的重要原因必须是基于丑陋,自动完成/提示和智能感知的嵌套嵌套数组配置。它侵犯了我个人对OO世界中过度使用数组的厌恶。
加文·豪顿

1
正是我的意见。
丹尼尔(Daniel)

我觉得Yii 1并不难。也许那是给我的。:P
尤金·约瑟夫

5

ZF的一些问题使它变得烦人(并且对于初学者而言很困难):

不包括ORM。有人会认为这应该是现代MVC框架的基础,而ZF仅随附于Zend_Db_Table,这是低级的。您可以使用Doctrine,但是您只能自己使用,它与ZF完全没有任何集成。

不可读的,URL肿的URL路由器。例如,定义9个最简单的路由需要9行代码:

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

给定与此相关的大量问题,对于大多数人而言,这简直就是简单。另外,我也帮不上忙,并将其与Django进行比较,而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需要在OOP和设计模式方面有扎实的基础。根据我的经验,我只会找到经验丰富的Java-JEE-Struts-Spring程序员,这些程序员很容易熟悉Zend Framework。一般的PHP开发人员很难理解Zend Framework背后的概念和体系结构。但请看嘿!Zend Framework来自“ Zend”公司,该公司首先创建了PHP。所以它需要一些思考,甚至​​可能不尊重!


1
Rasmus Lerdorf创建了php,zend是php的高度支持者。从我的回忆中。
Sarmen B.

不能在那里同意。我是Java开发人员。我不仅轻松进入ZF,而且还喜欢其他框架。
jkushner '16

-2

我相信zend只是使事情变得复杂,MVC从逻辑上来说只是一种欺诈,就像普通的PHP一样。但是您是在MVC之前开发它的,就像在不同目录中分离文件一样。

请记住,谁在说Zend非常安全并且无法破解,这是一个大傻瓜。如果您不使用Mysql注入保护,Zend也可以轻松破解。我想建议您定义自己的函数,然后将文件分开放在不同的目录中,以使其类似于MVC,将函数,类和其他核心材料保存在一个名为controller的目录中,然后将网页添加到需要的其他目录中包括该目录将称为视图的所有那些功能文件。将您的javascript和css文件放在不同的目录(称为模型)中。

请记住,在这个世界上,许多人总是努力使事情变得更复杂,因为他们自己很难理解。

PHP是您在书本上和老师那里学到的语言。Zend不仅仅是一个框架,它会使您的客户变得复杂。因此,只要有客户需要任何修改,他们就会跑回真正的开发人员,这些开发人员将向您收取更多费用。Zend仅受其保护,一个简单的错误,例如纯PHP编码,可能会导致网站可入侵。


-6

至少“快速启动”的东西必须更容易才能使框架更友好.....如果您更喜欢将困难的东西当作更好的东西,那么我会说“ ZF是最好的PHP框架”,否则就不是。我已经下载了ZF-2并进行了试用(老实说,我是ZF的新手)。可悲的是,我还没有在互联网上找到一个简单的Project Skeleton扎实的“快速入门指南”。我所寻找的只是包含库文件和创建具有MVC功能的项目文件夹的简单方法。我使用了Codeigniter,Cake php,Yii,但我发现它非常不友好。是的,我知道Zend会升级PHP,但这并不意味着它是最好的框架或您所说的任何东西。


一直不喜欢.... LOL
Ram
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.