使用PHP构建大型Web应用程序时避免使用框架是否有意义?


9

作为PHP Web应用程序开发人员已有几年了,我分享了MVC和框架。起初我以为它们是切成薄片以来最好的东西。一切似乎都很容易实现。

但是,现在看来,应用程序越复杂,框架引入的麻烦就越多,因此我必须开发解决方法来克服它们。由于我必须深入研究框架核心代码并进行更改,以便使其按照我想要的方式运行,因此此类解决方法通常非常艰巨而复杂。

例如,在我的一个使用Slim(C)+ Idiorm(M)+ Twig(V)的项目中(我认为它非常灵活),我必须创建一个自定义函数,以便在父模板中显示动态数据。没有框架,我本可以在包含的文件中简单地执行mysql_query()。

好的,如果我要创建一个简单的公司简介网站,框架会很酷。我可以在一夜之间鞭打一些代码,它们通常在早晨准备就绪,而且我从它们那里学到的良好的编码实践和设计模式非常有价值。

但是实际上,对于像基于Web的多合一学校管理系统这样的复杂Web应用程序,框架通常会像上面的示例那样妨碍我的业务流程。

所以我的问题是:可以回到基础上,并使用标准的PHP代码和库来做下一个项目,那里可能有大量的框架和库,只要我能充分使用良好的编码习惯并遵循明智的设计模式,就可以了吗?喜欢MVC?我的开发团队很小:只有2个程序员和1个设计师。其他程序员也同意我的上述想法。


1
“但是,应用程序越复杂,使用框架的麻烦就越多”。这只是争论和主观。您能消除这种抱怨并解决实际问题吗?您能否提供要解决的具体问题的具体示例?如果这仅仅是“我不喜欢框架”,那实际上不是一个很好的问题。也许您可以专注于真正有答案的事情,而不是分享意见。
S.Lott

@ S.Lott:好吧,我确实提供了一个例子。实际上,我不讨厌框架。我只是想知道人们对现代不使用PHP框架的想法。
Furunomoe 2012年

“我经常不得不创建一个自定义函数来显示动态数据”?这不是一个非常详细的示例。目前尚不清楚框架为何或如何使您失败。您极有可能使用不正确的框架。
S.Lott

Answers:


17

我的经历与您的经历几乎相反。在做小而快速的事情时,框架可能会有点“麻烦”,因为您需要以某种方式布置代码并在继续之前仔细考虑事情。只需直接跳到mysql_query您就可以启动原型并加快运行速度。

但是对于大型,复杂的站点,如果您想要一个可以持续维护的站点,那么仔细地布置代码并真正考虑如何编写代码非常重要。

特别是,将mysql_query调用添加到页面周期的随机部分通常是一个很糟糕的主意。您可能一开始就在那里,一开始就没什么大不了的,但是不久之后您到处散布了很多,您想知道为什么页面仅花3秒就可以渲染。或者,您更改​​了架构,并且由于未知原因,该站点中断的看似无关的部分。


1
当然,我不只是随地乱扔mysql_query()东西。我的意思是,在经典的PHP中,我可以简单地添加对类似的调用,Categories::read_all()并在某些header.php文件中循环遍历结果,而在Twig中,我必须为此创建一个自定义Twig函数。对于原型,我喜欢脚手架功能:)
Furunomoe 2012年

1
您不需要一个框架来仔细布局并考虑您的代码。没有框架就更容易做到这一点。框架将中等水平的代码组织模式强加于您。
雷诺斯2012年

3
当您执行复杂的项目时,框架确实会发光,因为它们定义了必须遵循的一组规则和准则。我+1了Dean的答案,因为这也是我的经验。
Burhan Khalid '02

7

在我看来,只有在使开发过程对您来说更容易且不麻烦的情况下,才应使用框架。不使用框架或构建自己的框架没有错,特别是对于小型项目。

显然,您仍然需要注意结构和安全性方面,但是考虑到您使用框架已有很多年,您可能已经完全了解这些方面。

对于较大的项目,我同意其他项目,这意味着从长远来看,使用框架可能将是最佳选择。


对于小型站点而言,更容易做的事情对于大型站点而言可能并非易事。反之亦然。
Goran Jovic

1
@Goran Jovic,同意了。
Daniel Scocco'2

1
为+1 building your own。不管您是否意识到,最终都会得到大量的帮助器函数和/或类,它们可以被认为是您自己的框架。
Izkata 2012年

5

我在服务器端“框架”方面的经历令人非常不愉快,例如:

A)Jar文件地狱,其中框架相互冲突或与应用服务器冲突,导致彼此不兼容的版本互不相关,这些互不兼容的版本您不想要且一无所知,也无权支配,因为这会阻止您在以下位置进行部署多台服务器。

B)将最简单的对象创建灾难性地爆炸成数千个不必要的SQL执行。

C)奇怪的想法是,编码100行XML比编码2行Java更容易或更可靠。

D)需要编写100行完全不必要的服务器端POJOS线,以另一种或有时使用多种其他语言(C#JS等)映射到客户端对象

E)不知道当您得到一个30级的深层堆栈跟踪(甚至不包括您用来调用该框架的代码行)时真正发生了什么。

做个叛徒,编写自己的框架...只要您计划首先消除所有不必要的内容,其他人就会使您认为自己没有必要,您就不会后悔。然后,您将了解所有内容,它将以Kb而不是Mb的形式提供,并且它可能会“在任何地方运行”,这是Java的创立原则之一,不是吗?

尝试以这种方式思考“我为什么需要这个……仅仅是为了保持框架的快乐?” ..如果我不需要那个,那我还不需要什么呢?


4

Django开发人员有一种演示方式,我现在很难找到它,但是他们谈论的是“效率之谷”,框架使您的工作效率更高。

假设您在开始一个项目时对框架一无所知,那么最初的生产力将非常低-您将学习框架的约定而不是语言的习语(希望您已经知道)。

短暂的时间后,您就会了解这些约定,这才是框架真正发挥作用的地方-突然,您的生产率就达到了顶峰,您正在不断进步,并通过开发取得了惊人的速度。

但是,最终,该项目的规模将使该框架更多地是一个约束而不是福音,您将看到自己对框架进行尝试并实现一些功能。

在演示文稿中,他们提到,当然,如果您已经了解框架的约定,那么规模较小的项目就不会对效率产生最初的阻碍。

因此,对于小型项目(以我的经验,大约500个小时以下的任何时间),使用框架的效率可能会比不使用框架的效率更高。一旦达到某个阈值(在500到800小时之间,即IME),您便开始意识到该框架可以提供的功能受到限制。

话虽如此,框架提供的好处远不只是效率-像Symfony或Django或(我假设)Rails这样的框架提供了一种约定,该约定允许团队动态地灵活变化,并且还允许客户或产品所有者更改员工而不需要完全重新学习新系统的新资源-如果他们熟悉框架的约定,并且已经遵循了该约定,则它们最初将比其他方面效率更高。


4

一个设计良好的框架应该对程序员有帮助,而不是阻碍。如果您使用的框架太麻烦了,我建议您考虑使用其他框架。每个都有自己的编码风格,也各有利弊。

话虽如此,Zend框架在当今看来似乎非常流行,老实说?我很难理解为什么有时。过去,我不得不使用它,而我一点也不喜欢它的体系结构。Zend_Form类的设计过于荒谬,其装饰器系统在使用中极为恐怖,并且装饰器将表单与视图绑定在一起,打破了OOP的基本概念,即应松散地耦合对象。它还有很多实现为“单调”的代码(由于有充分的文档记录,所以很糟糕,因此我不会重申),并且Registry对象也有助于鼓励草率的编码风格。

我听说Zend Framework 2(目前处于beta版)是一个更好的产品,但是Zend 1残留在我的口中的不良味道意味着我不急于尝试它。

尽管如此,在这一点上我只是在抱怨。:)那里有很多框架,每个框架都有其优缺点,我建议评估其中一些。



2

使用框架可以避免重新发明轮子,从而帮助您加快开发速度。Framework还为您提供了可帮助您正确设计应用程序的工具(但它并不能阻止您做出糟糕的设计决策,例如,直接从视图访问数据库)。

有时,当您需要自定义功能时,可能需要更长的时间才能正确编写它。但是,如果您经常黑客攻击并找到解决方法,则说明您正在使用该框架,或者该框架不适合您的需求。

最重要的是,对于简单的项目使用大型框架(例如,显示数据库中的一些字段)有时会显得过分。对于大型或复杂的项目,请使用框架。


1

与使用框架相比,编写自己的代码有很多方面:

与您一起工作的团队的规模,基本知识和经验:如果他们从未使用过框架,或者对如何构建应用程序有任何想法,那么使用一个文档齐全的框架(包含许多示例),您会更好,并且可以加速开发。起来

应用程序的大小:您永远不会知道如何使用它。因此,您最好为成长和变化做好准备。您希望在一夜之间编写代码的框架是否可以随着管理需求而增长?更改数据库中的字段类型,这需要一分钟或一天的时间来实现,这就是我的意思。

准备工作:如果使用框架,则可以开始设计应用程序而不是对应用程序的核心进行编码,请使用其中安全性部署是重要组成部分的程序,这将花费大量时间。每次。

我总是与“管理层”争论使用Symfony2,因为它是Web开发的框架。管理层认为这是很大的事情,因为学习曲线陡峭,会花钱,并且会吓退程序员。


0

框架仍将用于现代的任何语言,尤其是大型项目。项目越大,框架就越重要,因此您知道所有逻辑的位置,每个功能都有相似的布局。当您知道在哪里寻找所有数据访问,所有演示或在何处管理业务规则时,它使修改项目变得更加容易,并且使学习变得更加容易。

尽管有必要选择适合项目的框架,但企业解决方案需要具有企业能力的框架。这是使用PHP时会遇到的问题。许多(大多数)框架不适合大规模使用,尽管它们对于较小的个人站点也可以正常工作。对于您提到的学校管理系统来说,它需要一个更强大的框架,并且可能需要一些时间才能在PHP中找到合适的框架。

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.