php框架 - 构建自己的vs预制

时间:2010-03-25 12:45:29

标签: php frameworks

我正在使用PHP构建一个应用程序,我正在尝试决定是否使用像codeigniter这样的预先存在的框架,或者构建我自己的框架。该应用程序需要真正可扩展,我想完全控制它,这让我觉得我应该建立自己的,但同时我不想重新发明轮子,如果我不需要。

任何建议都非常感谢。

由于

8 个答案:

答案 0 :(得分:14)

使用现有框架。

首先,从头开始创建框架代表着对时间和精力的巨大投入。这个过程涉及大量的试验和错误,因为你正在设计一些既简单又强大的东西。对于每个设计决策,您都必须问自己它将如何影响将构建在您的框架上的每个未来项目。

你认为你可以做出每个设计决定并按照你对任何其他软件项目的要求进行权衡,但事情是你不了解你的要求。你无法了解它们,因为一个框架应该能够在其域内做几乎任何事情(或者能够扩展以做几乎任何事情)。未来的项目a需要能够做x。您的框架可以在不将其转换为意大利面条代码的情况下实现吗?如果项目b需要做什么呢?如果项目c需要做z怎么办?

您预测了一切吗?

现在对此的正常反应是,如果某些东西不起作用,您将来只会更改它。毕竟这是软件。然而,框架不像一个简单的应用程序。它应该有一个接口,一旦你将它暴露给将要使用它的软件,你就无法改变它。您可以扩展它,但不能更改它。所以现在你必须考虑弃用方法,api版本和版本兼容性。这是一套全新的问题,需要处理正常的框架维护和新的应用程序编写。

然后是文档。您需要API,教程和示例代码。一旦你构建了自己的框架,你也必须处理这个问题。你可以忽略它,但我向你保证,最终你自己需要找出你6个月前写的方法。它返回了什么?如果特殊情况x发生怎么办?您是否已将所有内容写下来,或者是否需要再次单步执行代码?而且我甚至没有提到新团队成员开始使用自定义框架是多么容易,该框架的文档完全或至少主要在您的脑海中。

您还必须承认,除非您与最优秀和最聪明的人合作(并且有预算要匹配),否则您将永远不会拥有现有框架所夸耀的大量库。您能否比开源社区更快地分析,设计,编码,测试和调试?

最后你应该问问自己,你是否足够精通写一个框架。您是否深入研究了现代OO PHP5框架的代码,以找出是什么让它成为现实?最重要的是,你知道为什么它以特定的方式做事情?请记住,您在设计中犯的任何错误都可能会在几个月内爆炸,您可能会一次又一次地为它们付款。

总结一下,我建议你选择现有的框架;然而,这并不意味着你必须选择一个喜欢它。花时间去开发一个新框架,并将其用于学习现有框架。然后您可以扩展它以满足您的需求。还要记住,有些东西你无法做到。但是我向你们保证,你们自己的框架也可能无法做到,所以这并不重要。框架强加了一些限制。这是您为更快地开发应用程序而付出的代价。

答案 1 :(得分:4)

列出框架的需求列表(ORM,PHP 5.3,PDO等)。然后迭代现有框架并缩小它们以找到符合您要求的框架。然后查看代码库,文档,社区,项目活动 - 您是否觉得您想要使用它?对于自己实现所有需求所需的时间也要切合实际 - 您是否希望专注于构建应用程序或框架?

答案 2 :(得分:4)

我正在建立自己的,我很高兴我在学习方面做了,这对我很重要。我也喜欢完全控制我的代码。它有很多负面因素,最重要的是我是唯一知道如何使用它的人。此外,大量开发时间用于改进我的框架,而不是将产品交付给我的客户。但我不能强调我真的非常喜欢建造和使用它。

如果你想学习(很多)建立自己的。如果您只想完成工作,请使用现有工作。 (在开始我自己之前,我差点使用CodeIgniter)

答案 3 :(得分:2)

虽然我过去构建自己的CMS框架,并使用自定义(内部)通用php框架,但我会找到一个适合您的开发风格并使用它的活动框架。

除非您的主要产品/应用程序框架。但它似乎并非如此。

您对控制和可扩展性的担忧应该应用于框架的主机 - 为您提供符合您要求的简短选项列表。

当然,这不是'内部'vrs'公众'的问题,那么一旦你做了那个电话,就选择任何旧的框架。

要回答这个问题背后的问题,对于一个可以让你完全控制并且应该能够很好地扩展的框架(我不确定你需要如何扩展框架),我会建议Zend框架即可。你可以使用它的单个部分,重写你想要的东西,它不仅仅是一个MVC实现。

更新:使用Zend进行自定义的快速示例。如果您不想使用他们的MVC堆栈,但需要一些路由请求,您可以使用Zend的路由器库。如果你喜欢MVC堆栈,但讨厌路由器的工作方式,你可以实现接口并编写自己的路由器。

这也适用于MVC堆栈之外。 Zend有大量的邮件库,RSS订阅源,缓存,身份验证,数据库等。使用你想要的,忽略其余的。扩展您想要的内容,如果标准功能无法满足您的需求,大多数框架都可以与您可以构建的接口/抽象/通用类进行分层。

答案 4 :(得分:1)

这个决定非常简单明了。 如果你想学习并拥有完全控制权 - 那就去自己 如果你想快速赚钱 - 去做一个现成的。

答案 5 :(得分:1)

我在一家公司工作,该公司最初编写了自己的框架,由一个在这里工作的人建造。它仅用于一个项目。这样做的原因是我们很快就意识到虽然它很聪明且非常好,但没有相关的文档。因此,如果我们聘请其他开发人员或自由职业者,他们必须学习它。

我们使用CakePHP运行了一段时间,这很受欢迎,但它看起来确实很乱。我们最终选择了KohanaPHP。易于扩展,一些好的文档(可能不在那里与其他一些),格式良好的代码(意味着如果你找不到文档,你可以快速解决发生的事情)。编写框架的方式使开发人员可以轻松地选择并跟踪正在发生的事情。虽然我们总是在使用CakePHP时遇到麻烦。

我认为滚动自己框架的唯一理由是你可能想要一些高度定制的东西。但Kohana很容易扩展,你可以把它放在那里。如果你真的不想,你不必使用他们的打包库。

那就是说,有些项目我根本不打算使用框架,只是某种路由解决方案,比如GluePHP。因为使用完整的堆栈框架会有点过分。

答案 6 :(得分:0)

简短的回答是 symfony2 IHMO。

原因是:

  • 不要重新发明轮子
  • 一个好轮子比你好(其他人是专业轮子制造商, 因为很多时间)
  • 可以扩展或修改OSS框架,甚至只检查
  • 你或没有时间维持自己的轮子
  • 许多眼睛和手比2更好!

当然,之前的观点对于一小组专业制作的框架是有效的!我最喜欢的是symfony2,但有很多不错的选择。

答案 7 :(得分:0)

如果你只是想练习,我建议你自己写一下。否则,肯定会使用现有的。 Symfony ftw。