9

这不是关于使用什么框架的问题。我已经学习了 Rails 和 Django,并且我用 PHP 编写了所有的 web 应用程序。我的问题是为什么要打扰框架?使用框架总是比重用旧的 MySQL 代码和使用 phpMyAdmin 构建“模型”要花更长的时间。我也喜欢自己写一切,因为我知道发生了什么。我仍然可以重用函数等并按照我的意愿做事,而大多数框架似乎都缺少这种自由。

我并不是说我的方法是对的;事实上,我正试图找出我的逻辑失败的地方。炒作不能只是凭空而来。我错过了什么?

4

12 回答 12

28

框架的基本思想是允许您在更高级别的抽象上工作,并且只编写您必须编写的代码来实现您的特定需求。所有其他重复的东西都由框架为您处理,并且可能比您自己做的错误和安全漏洞少得多。

学习一个框架可能比使用基本语言特性和标准 API 自己动手学习框架需要更长的时间,但这根本不是真的——如果框架很好并且应用程序不是微不足道的,尤其是当已经了解了框架(为每个新项目使用不同的框架当然是愚蠢的),并考虑了查找和消除所有错误以及纠正所有早就发现、消除和纠正的设计错误所需的时间在其开发者社区的框架中。

几乎每个开发人员都有牛仔编码员的直觉告诉他“自己做事情比使用其他人编写的代码有趣得多,而且我确信我已经足够优秀了,可以在第一时间把它做好,所以它甚至会更快,并且更好的!”。这些直觉几乎总是错误的。

于 2009-05-16T22:59:45.337 回答
21

框架允许您专注于应用程序本身,而不必担心您必须为每个应用程序编写的样板代码。它们允许您使用经过试验和测试的设计模式(例如模型-视图-控制器)以更合乎逻辑(主要是面向对象)的方式构建您的站点。框架中的代码通常比您自己为一次性项目编写的代码更成熟且标准更高,因为框架有一个庞大的开发人员社区,他们在一年中不断完善代码。这意味着框架驱动的站点通常性能更好并且更安全。

你还提到你喜欢自己写东西——我知道你来自哪里。我对此的解决方案是编写自己的框架——我可以在我所做的每个项目中重用和改进我的代码,并且我对整个代码库了如指掌。

于 2009-05-16T20:22:20.690 回答
7

自己编写可能会让您更容易理解自己的事情,但不幸的是,它会使其他开发人员更难理解正在发生的事情。框架通常会有更好的文档记录,并拥有一个更大的社区,可以支持正在开发您编写的应用程序的新开发人员。

于 2009-05-16T21:18:30.243 回答
4

我认为其中很大一部分是你所关注的。框架标准化了您不应该重复访问的部分,这有助于您将注意力集中在整个应用程序上。如果您一直重复使用自己的代码,那么您已经在使用自己的临时框架。

于 2009-05-16T20:22:23.000 回答
3

您将框架(Rails)与语言(PHP)进行比较。框架将为您提供预先构建的组件,以便您可以花时间在使您的项目与众不同的地方。

您可能已经有一个代码库可以帮助您完成这项工作。查看一些 PHP 框架,因为那是您更舒服的地方。看看CakePHPCodeIgnitor和/或Zend Framework

如果您正在构建许多小型应用程序/网站,使用框架可能会让您的生活更轻松。

于 2009-05-16T21:07:16.683 回答
2

我认为对您来说一个很好的步骤是使用您迄今为止编写的代码创建自己的框架。;)

尝试使您的代码参数化,换句话说:创建可以在网站的不同部分(例如:样式化的容器)或不同的网站(表单生成器/验证器)中重用的组件。

您甚至可以更进一步创建基类,从中扩展新类以构建您的网站。(例如:具有通用选择/插入/更新/删除方法的数据对象)。

我敢打赌,这可以让您更好地了解为什么框架如此方便;)

于 2009-05-16T21:05:21.977 回答
1

首先,PHP 也有框架,所以上述问题没有抓住重点。

是的,您可以编写自己的框架,正如 Kris 所说,这并不丢人。然而,代码重用的部分优势是许多人努力的集体价值。这不仅仅是重用您自己的代码。框架封装了我们都共享的常见任务和模式,并提供了经过良好测试的解决方案以及来自社区的许多迭代改进。无论你是谁,任何个人的努力都无法达到这一点。

如果你自己动手,它只会因为世界级的人的集体努力而成为世界级,而且只有当你的想法值得关注时才会发生。现有的顶级框架已经在这些标准上得到证明。

DHH 是个聪明人,但我们今天所拥有的 Rails 不可能仅靠他一个人实现。差远了。

如果你喜欢如你所说的“自己写一切”,那么选择一个核心理念与你相匹配的框架,并开始在你认为有改进空间的领域做出核心贡献。

于 2009-05-17T06:12:28.250 回答
1

根据您的 Web 应用程序的功能,在没有框架的情况下可以更快地进行开发。例如,当 Webapp 只是某种数据查看器时。

但是,一旦您开始实现更高级的功能,使用框架的效率就会大大提高。

尝试从头开始: - 正确的表单验证 - 处理多种语言和日期/时间格式 - 身份验证

将框架视为免费工具和稳定的实现功能供您使用。

于 2009-05-17T06:35:42.937 回答
1

您还应该只使用基于 PHP 的框架,例如 Symfony 或 CakePHP,使用它们应该会大大减少您的生产时间。

使用框架的一个原因是代码分离。以 symfony 为例。该模型全部使用推进或学说库完成。只需要很少的 SQL。您实例化一个新对象和用户 getter 和 setter,以存储您的数据,而不是在页面代码中编写 SQL,而是在与查询相关的对象中创建函数。当您需要在不同页面上访问相同类型的数据时,您是在向模型询问它,将业务逻辑与模型保持在应有的位置,因此永远不会有任何区别。所有工作都在“动作控制器功能”中完成。你得到你需要的所有数据,然后把尽可能少的 php 放在显示中,基本上只是回显你在动作控制器中得到的变量,(除了一些 for 循环和条件语句的 if 语句。

你不需要为了使用一个伟大的框架而学习一门新的语言 python/ruby,只需要找到一个适合你的。

于 2009-05-17T02:08:11.360 回答
1

最初使用框架会花费您更长的时间,原因与 PHP 开发人员最初使用 Ruby 需要更长的时间的原因相同——您不熟悉它。

一旦你熟悉了它们,框架就可以提供跳过平凡而专注于实际编写应用程序重要部分的能力。

于 2009-05-16T21:25:16.500 回答
0

听起来你已经用 php 编写了自己的框架,因为你确实提到了代码重用。

我可以想象使用自己的轮组比适应别人的轮组更容易。没有什么可耻的。

于 2009-05-16T22:57:44.437 回答
-4

框架的存在主要是为了帮助那些对 PHP(或它所构建的特定语言)半新的人能够构建一个网站,使其安全且易于在网站上添加额外的部分,而无需必须对安全性、MySQL(或其他数据库类型)等细节有很多了解。在我看来,这是一种帮助将编码器分解为一种语言的相当好的方法,同时考虑到框架当然不是太复杂的事实。

编辑我之所以说它们是为初学者准备的,是因为我自己,作为一个初学者,已经使用框架更好地将自己分解成语言。

于 2009-05-16T21:06:25.720 回答