Zend Framework和Django之间的真实世界差异是什么?

时间:2009-03-17 11:19:05

标签: php django zend-framework

对于Web应用程序来说,我是一个很长时间的PHP用户,并且对它很满意。但是,我有一个半大型项目,其维护/可扩展性已达到生命周期的终点。我正在权衡不同的PHP框架(当项目发起时没有),因为它是这个项目的方法,我得出结论,ebst选项将使用Zend Framework来实现。

  • Symfony似乎很复杂(我不喜欢设置数据库模型
  • CakePHP似乎模糊不清
  • 我一开始喜欢点火器,但在我看来它更像Zend,功能更少,而且没有Zend支持
  • Zend我喜欢这样的系统,我只能使用我喜欢的东西而不是绑定到特定的目录结构,当然还有Zend背后的东西。性能是可能困扰我的

现在,在选择Zend背后的这个小理由之后,在选择框架时,我认为有几件事情是破坏性的。

  • 我过去没有使用过ORM,因为我更乐于直接编写SQL,所以我仍然需要被说服使用ORM
  • 没有太多的抽象来自胆量
  • 灵活的目录结构

只要这个项目要重新编写,我就像在Python / Django中编写它一样,因为我对Python很熟悉,但不熟悉Django。所以,我想知道是否有人使用Zend Framework和Django框架,是否可以概述一些关键点差异?

我还必须说这个项目是作为一个标准的站点/管理双项目。也就是说,它基本上是两个站点。一个用于前端和用户,另一个用于后端的数据管理。我必须并且将自己构建后端,一些脚手架方法会很酷,但在这种情况下,全自动脚手架就像没有任何东西一样好。

 我仍然不确定如何在一个应用程序的目录结构中构建基本上两个应用程序。你刚刚制作了两个独立的应用程序,并依赖于URL方案来分离它们吗? www.example.com和所有/ *是一个应用程序,www.example.com/admin/*是第二个应用程序。

很抱歉这个问题很长,但正如你所看到的 - 一切都与一个问题有很大关系 - 我需要重新启动一个项目,它已经建立了我可以重新构建的数据库+数据,但我想保留它至少是一种工作。


好的,谢谢大家 - 看起来我会尝试用Zend实现这些东西,给我最大的灵活性(我用两个测试),我们会看到它是怎么回事。

4 个答案:

答案 0 :(得分:12)

Django是比Zend更全面的框架。它与symfony比Zend更相似。

Django可以将您的数据库反向工程为ORM类。并有一个cli工具,可以帮助你做东西(管理和模型生成器,项目骨架生成等)。

Zend更像是一个组件框架。它有自己的MVC和ORM实现,但你需要单独编写这些东西。它的方法是只使用你需要的东西而不强加一些目录结构。

在你的情况下,Django因其出色的管理生成器模块而具有一些优势,而Django本身速度非常快(比大多数PHP框架更快)。

我个人使用symfony和Zend框架来处理一些我需要的东西(Mail,OpenID,Lucene搜索),但是我和Django玩过一段时间,我喜欢它。

答案 1 :(得分:5)

Zend不包含真正的ORM。它提供了一些辅助类,但您主要是自己建模数据库和编写自己的SQL查询。所以你在那里会有充分的自由。正如Deresh所说,Zend是模块化的,因此您可以选择所需的部件。

我个人使用Zend和PEAR的DB_DataObjects作为ORM。它可以自动生成您的骨架代码。这是处理简单查询的一个非常简单的解决方案,但我总是可以在必要时编写自定义SQL。

关于两个管理员和前端的分离,我建议将它们放在不同的域上,例如:admin.yoursite.com(后端)和www.yoursite.com(前端)。您可以将它们放在同一个URL上,但它实际上并不是Django或Zend支持的用例。

答案 2 :(得分:2)

我对Django并不是那么有经验,但从我所读过的内容来看,它似乎并不是你想要的东西(过多的“从胆量中抽象”)。 Zend框架没有为您提供ORM。它为您提供了一些可能有助于代码可维护性的工具(例如,它更容易在Zend_Db_Table_Row对象上执行$ user-> save(),然后手动键入等效的SQL字符串)。 如果你更喜欢做SQL,那就太酷了,Zend深入研究了......只要注意可能会遇到更多的维护问题。我建议使用“命名查询”方法,将查询存储在外部资源中并按需“加载”。 Zend有一个非常灵活的目录结构......推荐的目录结构只会使事情变得更容易。 您可以使用modules轻松提取管理部分网址并路由....这是Zend中一个非常常见的用例。

总的来说,Zend主要是一个“演示框架”。这就是它擅长的。它为您提供了一种干净的方式来组织向用户显示的演示文稿(屏幕)并帮助维护。

从数据的角度来看,它对您没有太大作用。这取决于您,并且可能需要完成90%的工作才能变得“可维护”。

目标是您的业务逻辑内容和数据访问内容应该在任何“框架”中运行,甚至没有Web服务器!否则你只会把你无法控制的任何事情都移到Zend身上。

另外,我不会关注自己的表现......可以通过良好的缓存策略解决问题。

答案 3 :(得分:1)

我无法在Zend和Django之间进行比较,但我可以告诉你,完全有可能让Django“admin”应用程序在不同的域(虚拟命名服务器)上运行,并且您不需要复制任何代码。您只需正常构建Django应用程序,但将管理应用程序和URL放在共享公共数据库服务器/集群的其他虚拟服务器中。

Django管理员应用程序确实有局限性,但它对于几乎免费的东西非常强大。

最后,当我第一次开始使用Django时,我对ORM一般有很多不屑,但我现在接受它们作为工具箱中的一个有用工具。