Zend Framework和Django在现实世界中有哪些区别?

10

我是一个长期使用PHP来开发Web应用程序的用户,对它非常熟悉。然而,我有一个相当大的项目已经到了维护/扩展周期的末尾。我正在权衡不同的PHP框架(在项目开始时还没有),因为它是这个项目发展的方向,我得出结论最好的选择是使用Zend Framework。

  • Symfony似乎太复杂了(我不喜欢设置数据库模型)
  • CakePHP看起来比较混乱
  • Igniter一开始我很喜欢,但后来我觉得它更像是一个没有Zend支持的功能较少的Zend
  • Zend我喜欢它的系统,我可以只使用我喜欢的部分,而不必被绑定到特定的目录结构中。当然,Zend背后也有支持。潜在的问题是性能

现在,在选择框架时,有几件事情我认为是不能妥协的。

  • 过去我没有使用ORM,因为我对直接编写SQL非常熟悉,所以我仍然需要被说服使用ORM
  • 内部没有太多的抽象
  • 灵活的目录结构

既然这个项目将重新编写,我也可以使用Python / Django来编写它,因为我对Python非常熟悉,但并不熟悉Django。因此,我想知道是否有人既使用过Zend Framework又使用过Django框架,并且是否能够列出一些关键的区别?

我还必须说明,这个项目包括标准的站点/管理双重项目。也就是说,它基本上是两个网站合二为一。其中一个是面向前端和用户的,另一个是面向后端数据管理的。我必须自己构建后端,一些脚手架方法会很酷,但在这种情况下完全自动的脚手架与什么都没有一样。

我还不确定如何处理在一个目录结构中构建两个应用程序的问题。您是要创建两个独立的应用程序,然后依靠URL方案将它们分开吗?例如,www.example.com及其下所有/*属于一个应用程序,而www.example.com/admin/*则是第二个应用程序。
抱歉问题比较长,但正如您所看到的,这些问题都与同一问题相关 - 我需要重新开始一个项目,已经建立了数据库和数据,我可以进行重新设计,但希望最小限度地进行此类工作。
谢谢大家的意见,看起来我将尝试使用Zend实现这些功能,这个包给我最大的灵活性(我已经测试了两个),我们将看看会发生什么。

1
我并不认为Zend_Db是ORM - 它是一个面向对象的SQL接口。它提供了一些抽象来简化你的生活,但它在ORM所提供的功能上相当缺乏。我并不否认它 - 它并不意味着成为一个ORM。 - Sean McSomething
4个回答

12

Django比Zend更偏向于全栈框架,与Symfony相比较相似。

Django可以将您的数据库反向工程成ORM类,并且具有CLI工具来帮助您完成各种任务(如管理和模型生成器、项目骨架生成等)。

Zend更偏向于组件化框架。它有自己的MVC和ORM实现,但您需要自己编写这些内容。其方法是仅使用您需要的内容,而不强加一些目录结构。

在您的情况下,Django将具有一些优势,因为它拥有出色的管理生成器模块,并且Django本身非常快(比大多数PHP框架都要快)。

个人而言,我在某些需要的地方使用Symfony与Zend框架(如邮件、OpenID、Lucene搜索),但我也尝试过Django并且喜欢它。


5
Zend没有真正的ORM。它提供了一些辅助类,但在建模数据库和编写自己的SQL查询方面,你大多数时间都是靠自己的。因此,在这方面你有完全的自由。正如Deresh所说,Zend是模块化的,所以你可以挑选自己需要的部分。
个人而言,我使用Zend和来自PEAR的DB_DataObjects作为我的ORM。它可以自动生成你的骨架代码。它是处理简单查询的非常简单的解决方案,但我总是可以在必要时编写自定义的SQL。
关于将管理后台和前端分离,我建议将它们放在不同的域名下,例如:admin.yoursite.com(后端)和www.yoursite.com(前端)。你可能可以让它们都在同一个URL上工作,但这并不是Django或Zend支持的用例。

它通过模块得到了ZendF的支持,但答案似乎已经过时了! - Omar Al-Ithawi

2
我对Django不是很熟悉,但根据我所了解的,它似乎不是你想要的(过于“抽象化”)。 Zend框架不提供ORM。它提供了一些工具,可能有助于代码的可维护性(例如,在Zend_Db_Table_Row对象上执行$user->save()比手动输入等效的SQL字符串容易得多)。 如果您更喜欢使用SQL,那没问题,Zend支持...只是要注意可能会遇到一些更多的维护问题。建议采用“命名查询”方法,在外部资源中存储查询,并“按需”加载它们。 Zend具有非常灵活的目录结构...推荐的目录结构仅使事情变得稍微容易一些。 您可以轻松地使用模块和路由来获取管理部分的URL...这是Zend中非常常见的用例。
总之,Zend主要是一个“演示框架”。这是它擅长的。它为您提供了一种清晰的方式来组织向用户显示的演示(屏幕),并有助于维护。
从数据角度来看,它对您没有太多帮助。这取决于您,也可能是成为“可维护性”的90%工作。
目标是,您的业务逻辑和数据访问应该在任何“框架”中都能正常运行,甚至没有Web服务器!否则,您只会将不可维护的混乱从原来的地方转移到Zend。
另外,我不会关心性能...大多数问题都可以通过良好的缓存策略解决。

1

我无法比较Zend和Django,但我可以告诉你,在不需要复制任何代码的情况下,完全可以将Django“admin”应用程序运行在不同的域(虚拟命名服务器)上。您只需像平常一样构建Django应用程序,但将管理应用程序和URL放在共享公共数据库服务器/集群的不同虚拟服务器中。

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

最后,当我开始使用Django时,我对ORM普遍持有轻蔑的态度,但现在我接受它们作为工具箱中有用的工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接