构建一个PHP应用程序,对设计模式感到困惑

时间:2010-11-05 09:56:31

标签: php

我被要求构建一个将数据插入数据库的PHP应用程序,然后允许用户在数据库上运行报告。

几年前我有几年的PHP开发经验,但我被卡住了。

我已经阅读过有关MVC,框架等的文章......而这一切似乎都已经改变了:)

最好的使用方法是什么?我觉得iv被困在时间扭曲中,现在又回到了PHP,它已经彻底改变了。我质疑我所知道的一切:)我甚至不知道用什么目录结构来展​​示应用程序:)

我希望有人可以提供帮助,并就如何使用设计原则等应用程序提供一些建议......

请帮助我完全迷失:)

编辑:我不想学习框架,而是学习如何构建应用程序。 :)

8 个答案:

答案 0 :(得分:2)

首先,选择一个框架。然后,遵循它所需的目录结构及其使用的设计原则。

答案 1 :(得分:2)

将其细分为步骤。想一想代码可以重用的地方。

虽然我没有使用现成的框架,但多年来我一直在构建一个框架。不要对框架保持警惕,应该接受它们。

例如,我的框架非常简单轻巧。当我启动一个项目时,我创建了两个(有时是三个)目录:

cms/
inc/
tpl/

它们非常明显: cms 如果需要,还有一个内容管理系统; inc 包含PHP脚本; tpl 包含模板和资源,例如图片,样式表和JavaScript文件,提供:

cms/
inc/
tpl/
    css/
    img/
    js/

然后我有一个index.php文件,它接受一个请求(即http://www.example.com/news/2010/11/05/lorem-ipsum),它只是传递一个匹配第一个段的脚本(在上面的例子news.php中)和剩余的URL段用作参数。因此,在我的示例中,要获取与日期(2010年11月11日)和文件名(lorem-ipsum)匹配的文章。

不要过度设计事物。首先进行规划,你会发现头脑清醒,你会减少过度工程量。

答案 2 :(得分:2)

我喜欢你的想法。我看了CodeIgniter,Cake和其他框架,虽然他们很好,但我决定自己编写。我学到了很多东西。我的框架的第一个修订版并不是那么好,但我有两个网站在没有问题的情况下运行。它的第二版可能没有Cake等那么成熟,但它使得构建PHP应用程序变得轻而易举,对我来说关键是:我知道代码的每一行都做了什么,并且它的超级快速更改和调试< / em>的

我认为首先要做的是考虑如何将应用分成几层,明显的候选者是:

  • Front Controller:一个解析URL并决定如何处理它们的类。如今,大多数框架都使用Apache mod-rewrite规则将所有URL转发到一个类 - 因此它是应用程序的单个入口点。
  • 数据库抽象层:将所有读/写的代码放在一个地方,让所有内容都调用它。也称为ORM。
  • 模型:表示数据库中一个或多个表的类。
  • 控制器:更新/读取模型,应用逻辑并填充和显示视图的类。
  • 视图:从控制器导入数据的HTML文件。我用Smarty。

所以拿这些元素,你有一个基本的目录结构:

/models
/controllers
/includes
/views
/css
/js
index.php

index.php是我的前端控制器。我把ORM东西和其他帮助程序类用于执行通用工作,比如将表单和内容处理到/ includes目录中。显然/ css和/ js包含你的静态javascript和CSS文件。

Front Controller的工作原理是您有指定要创建的控制器的URL - 例如:www.domain.com/product/1/hello-world。其中product是类的名称(我称之为控制器控制器) - 所以这里我的前端控制器将读取URL的产品部分并创建ProductController的实例。

控制器根据给定的URL的其余部分进行操作。所以ProductController获得了1和hello-world的参数。 1可以是要加载和显示的产品的索引。你好世界只是SEO文字要忽略。你也可以指定要调用的函数,所以www.domain.com/product/list - 这次你创建一个ProductController并调用list函数。

构建MVC应用程序有不同的方法,论坛上充满了关于它的论点 - 我把它放在我的上面或者可能不是真正的MVC,但主要目标是在你的应用程序中获得良好的抽象。

我建议您为View图层查看Smarty。它是一个稳定的库,也提供HTML缓存。

答案 3 :(得分:1)

不要重新发明轮子..使用Zend框架http://framework.zend.com/,是一个你能找到的最好的MVC结构。 从他们的快速入门教程开始。

答案 4 :(得分:1)

这更像是一个软件工程问题而非严格的PHP问题。有几种软件开发模型。 PHP支持一些比其他更好,但有一点创造力,你几乎可以实现任何设计。

<强> Model View Controller

这是您可能会遇到的最常见的Web平台架构。我们的想法是将应用程序逻辑和数据与用户界面分离。这使开发人员能够提供多个接口(移动接口,一个用于Web服务,一个用于浏览器等 - 这一切都发生在视图层中),而不必更改应用程序的核心功能。模型层提供数据和(到某一点)业务逻辑。控制器层耦合模型(数据)和视图(呈现)。 Zend Framework使用MVC,而Django(Python)使用MVC的变体。

<强> Model View Presenter

与MVC一样,它使用模型(数据填充)和视图,但控制器由表示组件替换。表示组件背后的想法与控制器非常相似,但区别在于演示者在MVC中消除了视图的一些责任。 MVP中的视图严格用于渲染。 MVP主要用于重型UI应用程序和组件。 Windows窗体使用它。

<强> Three Tier

三层系统使用表示层,业务逻辑层和数据层。表示层处理传入请求,传出响应和呈现内容。业务逻辑层实现了真正繁重的工作。它处理请求并根据这些请求做出决策。数据层由实际数据组成 - 无论是生活在数据库中还是从中提取数据的Web服务。

<强> Presentation Abstraction Control

PAC就像MVC,但更精细,并且包含了很多小的MVC架构,它们彼此分开。这个可能比你想做的工作多得多。

答案 5 :(得分:0)

框架只是确保采用最佳做法的方法。但是在一个小项目中,你可以很容易地采用没有框架的良好实践。您只需要一个或一组函数来完成与数据库的所有交互。这些将根据您传递的参数生成SQL查询。然后,所有非数据库逻辑应保持独立。或者,您可以创建一个或一组函数来处理查看代码(实际生成HTML的位),另一个函数来处理中间的位,但是如果你达到这个级别的MVC复杂性,你就会学习框架要快得多。

答案 6 :(得分:0)

我真的知道你的感受。

我是一个老派的家伙,我觉得我对所有这些新东西都有一点弹性。我不知道究竟发生了什么事情就无法使用工具。

对于框架福音传道者和大型开发人员感到抱歉。我认为当你使用框架,CMS或设计模式时,你会错过所有的乐趣。学习它们值得一会儿。只是使用它们并不是一件好事恕我直言。

好吧,这些天我们听到很多关于OOP,设计模式等等。学习这些东西是值得的。但正如@Martin Bean所说,“不要过度工程化”。 PHP将执行相同的操作,如果您执行结构化(包括,要求,功能),可能会更好。你可以逐步使用“新”资源,在他们有意义的基础上学习他们的基础,让你感觉更舒服。

走安全路径​​。按照你的要求做应用程序,并尝试学习一两件新事物。

答案 7 :(得分:0)

Rasmus Lerdorf(PHP的共同创建者)如何做到这一点,“无框架PHP MVC框架”:http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html