什么时候需要使用框架?[关闭]


15

我是Web编程的新手,目前我正在学习PHP。我想知道什么时候需要使用像CakePHP这样的PHP框架?这个和其他类似的PHP框架为我提供了什么?使用框架成为专业人士真的重要吗?

  • 我可以创建自己的框架来提供我喜欢的功能吗?

3
当您了解它提供了什么并且可以在需要时解决它时,请使用[xyz]框架。框架是面向了解如何使用框架并了解其选择局限性的技术人员的工具。在任何情况下,请勿仅通过学习框架来学习语言。就像故意关闭脚趾或周围的视线。提示,根据您使用的PHP框架,会话的行为会很奇怪..注意:)
Tim Post

Answers:


10

当您放心使用PHP时,可以开始使用框架。而且您应该始终使用它们:

  1. 这比重新编码所有内容快得多
  2. 它使修改变得更容易,例如更改数据库或更改视图
  3. 与其他人的合作也将更加容易,因为他们经常习惯于MVC模式框架使用

您可以创建自己的框架,但是我绝对不会推荐它。这很复杂,已经有很多好的框架,而且您不太可能会发现缺少的功能。此外,它们通常提供了向其添加您自己的功能的方法,而无需创建全新的功能。


2
+1为当您放心使用PHP时,您可以开始使用框架。 您的观点3)仅在框架非常相似的情况下才能很好地工作。我要添加“在大量使用一些不同的框架之前不要创建框架”
peterchen 2010年

8
我绝对不同意“您应始终使用它们”的说法。它们并不适合每个项目,并且常常使修改变得更加困难。实用程序比框架有价值得多。
妮可

@NickC +1,我完全同意。一些框架声称是动态的并且易于更改,但是到了某个特定点,您就……不能。我已经为这种事情想了很多:)
史蒂夫·希尔

我同意MVC是一个很好的共同点,如果使用得当,其他人可以以较少的学习弯腰进入您的代码。但是MVC是那里的明星,框架(或缺乏框架)只是实现。
Tim Post

所有这些都是理论上的,实际上是行不通的。PHP框架更有可能使所有这些事情变得更加困难。从头开始编写的平均应用程序大约需要五百到五千行框架代码。那大约是一周的平均工作量。如果不止如此,您可能正在编写库或正在构建内部平台。
jgmjgm

9

在没有框架的情况下构建几页...实际上,您将开始通过反复试验来编写自己的框架。完成此操作后,移至框架并享受节省的时间。尝试构建自己的框架可以教会您一些知识,并且将帮助您欣赏已经存在的框架。

刚接触PHP时,我认为框架是浪费时间的复杂问题。现在,我将CodeIgniter用于甚至简单的项目。启动和运行大约需要1分钟,您已经拥有大量的出色库供您使用。而且,如前所述,大多数框架都是可扩展的,因此您可以随时添加所需的任何功能。


2
但是,以后如何确保框架中的代码完全符合我的要求?我的意思是每个程序员都有自己的风格,对吗?那框架呢!
戈马2010年

1
@Goma语言是什么?我还没有找到可以按照我想要的方式做的所有事情。该框架只是添加了非常非常相似的内容(希望在更高的抽象层次上)。认真地讲,编码不是要“使一切看起来/行为/完全符合我的意愿。”而是要创建有用的东西,代码只是我们负担的责任,因为收益超过了在代码中拥有该代码的成本。第一名。
Christopher Creutzig 2014年

现在,@ TaylorOtwell是Laravel的创建者……
Hos Mercury

4

就像Niphra所说的那样,只有在没有框架的情况下可以使用PHP时才开始使用框架(即访问数据库,发送标头和内容,字符串处理,数据操作等)。就您的问题而言:

  • 我什么时候需要使用像CakePHP这样的PHP框架?当您的项目扩展到几个PHP文件之外时;当您开始强烈地将逻辑分离为不同的元素并模块化/共享功能(会话等)时,便是应该使用框架的时候。

  • 这个和其他类似的PHP框架为我提供了什么? 抽象化; 可以直接使用对象关系映射(ORM)来管理数据库中数据的结构和关系,而不是直接与数据库进行交互。大多数语言的大多数框架都提供ORM,以使其更易于与应用程序的数据库层进行交互。同样,框架通常将响应用户交互的各个层分开。最常见的分离是模型视图控制器(MVC)范例,简而言之,它将数据库逻辑抽象到模型(在许多情况下为ORM的接口),处理请求并与模型交互到控制器中,然后渲染实际的HTML / PDF / image / etc。进入视图。框架通常会提供其他工具,例如路由(以允许对请求URI进行复杂处理(例如:映射请求“http://example.com/users/1 “到控制器用户,然后控制器查找ID为1的用户模型以及会话和其他基本结构的抽象。

  • 使用框架成为专业人士真的重要吗?不必要; 框架使生活更轻松;但您不必成为专业人士。框架提供了方便的抽象和标准化,但是在大多数情况下并不是必需的。


3

在阅读了一些答案之后,我首先要说的是,对于要使用的框架或是否要使用一个框架(作为专业人士),您通常没有太多选择。我不想吓到您,但是您将需要对PHP有足够的了解,以允许同时使用多个框架从一个框架迁移到另一个框架。

什么时候需要使用CakePHP之类的PHP框架?

对此没有统一的答案。作为专业人员,您将需要解决特定的问题,这将成为每个项目的时间和内容的决定因素,尤其是在客户有特定需求的情况下。但是通常来说,您将始终在PHP中使用某种形式的框架,除非您要修改或扩展具有自身框架的现有应用程序(例如Wordpress或PHPBB)。

这个和其他类似的PHP框架为我提供了什么?

正如德克所说,它们提供了抽象。这意味着它们采用通用的多步骤过程,并试图使其尽可能简单和简化。简而言之,他们尝试为常见任务提供“加水”解决方案。

使用框架成为专业人士真的重要吗?

一般来说,使用框架成为专业人士并不重要。但实际上,如果您至少不熟悉几个通用框架,就不会有很多职业。没有框架的PHP就像没有标准库的C ++。您不需要它,实际上,如果没有它,您可以做更多的事情,因为您将直接使用该语言的较低级构建块功能,但是这样做将需要更长的时间。

我可以创建自己的框架来提供我喜欢的功能吗?

是。实际上,即使无意间,您也可能最终会这样做。这样,我并不是说一个扩展的框架,而是更像一个基本功能和执行任务的脚本的工具包,它并不常见或通用,无法由普通框架处理。我的基本上是由各种文件系统,进程处理和带有一些不同的curl和stream / socket实用程序的rex-ex tid位组成的。


1

这是一个常人的事,这个人花了多年的经验来探索我自己的方式来与数据库进行对话并与在线API进行对话,并且直到现在才开始使用框架,如果您至少了解它们的作用(如果可能)的话,可以使用它们。

第一次使用数据库时,不要立即跳入RedBean,首先要手动使用DB。这样,您就可以对数据库的实际访存和操作有个透彻的了解,这确实有助于扩展性。然后,当您使用的框架无法完成您需要做的事情时,您还可以制定自己的解决方案。

一旦您了解发生了什么,就使用框架!它使事情变得容易得多。存储查询然后遍历结果的疯狂方式mysql_fetch_assoc已经消失,减少为一个调用:$book = R::load( "book", $id )。您将提高工作效率,并且可以更轻松地修复将来的错误或添加将来的功能。


1

当您足够了解底层技术时,请使用框架,以了解该框架对您有什么作用,以及为什么这样(好或坏)。

框架是一种元工具,它使您可以更快地使用工具(语言,数据库),而不必担心正在执行的操作的某些细节,如果您真的了解自己的工具,那么这很好。工具。

您不希望发生的事情是,您学习框架而不是工具,并被灌输为某种特定的做事方式,最终并没有真​​正掌握基础语言和概念,这应该是一种工具,而不是拐杖。


1

当您发现自己一遍又一遍地做同样的事情时,请环顾四周,看看是否有一个框架可以完成您本来会做的相同的冗余工作。不要因为炒作而只使用框架。我个人喜欢CodeIgniter和Rasmus Lerdorf的“无框架PHP MVC框架” http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html


我已经写了几个“无框架框架”,以减轻向大多数静态(且巨大)的站点添加新功能的痛苦,这些站点无法轻松地移植到任何类型的管理/发布系统中,因此它们确实有其用途。但是我不会为一个全新的项目投入精力(如果需要框架,我只会使用CI)。
Tim Post

@Tim Post这个问题通常从来没有一个黑白答案。这完全取决于手头的项目,原始帖子没有提供有关特定项目的详细信息。
程序员

1
看起来我从框架狂热者那里获得了否决票,太好了!
程序员

是不是我:)也许有人对您发布的链接做出了反应,但并没有真正详细介绍它。
蒂姆·波斯特

@Tim Post嘿!因此,我确保将这两个评论分开。:D
程序员

-1

我建议您仔细考虑为什么要使用框架x,y或z。每个框架不仅提供您不必实现自己的功能,还提供一种思考方式。只要看看Spring,JEE,Rails或Django。四个框架足以在短时间内完成Web应用程序。

但是,所有这四个人都对如何构建Web应用程序提出了自己的思考方式。如果这不符合您的需求或与您的口味不符,那么您将很难再进一步。

这是一个非常激进的比较,但也许建立一个小型图书馆确实更符合您的需求。但是了解框架肯定会帮助您在更大的团队中工作或找到新工作,因为这表明您对整个软件开发感兴趣。


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.