PHP Web应用程序体系结构/设计


20

我已经被投入到使用PHP开发Web应用程序的新工作中。我绝不是PHP的新手,但我以前从未开发过大型应用程序。我想知道如何安排自己的发展,以避免将来遇到麻烦。如何以合理的方式设计和构造应用程序,以使它们可以在功能和性能方面随时间扩展。我在想这样的事情:

  • 将后端与前端分开
  • 目录结构

我希望能获得指向体系结构和应用程序设计模式,框架和方法的指针,这些指针使我能够以可持续的方式进行大规模PHP Web应用程序开发。


嗨!Web应用程序最常见的体系结构是MVC,用于PHP和其他所有流行的Web平台。也就是说,您应该阅读我们的常见问题解答。尽管软件体系结构是主题,但您需要修改问题以使其更加具体。“关于通用体系结构的健康讨论”不适合该网站的问答格式。
yannis 2012年

我是S / E网站的常客,我感到对这个问题没有一个答案,因此提出了“讨论”的意见。尽管感谢MVC指针:)
布拉德·莫里斯

Answers:


29

我参与的最新大型项目的体系结构的示意图。

在此处输入图片说明

它只是一个基本的大纲,它是根据实际的体系结构文档改编而成的,其呈现方式类似于典型的n层方法和典型的MVC方法。如您所见,逻辑和数据层是通过服务层(更具体地说是REST API)连接的,该服务层受到Recess(一个鲜为人知的PHP框架)的启发。

不要重新发明轮子

我使用以下三个框架:

  • Zend框架

    PHP框架的庞然大物,具有令人印象深刻的良好代码库和丰富的功能列表。在大型应用程序上,您会发现自己经常调整框架,而我发现ZF的代码库最适合使用。但是请注意,它不是入门级框架

  • 小花

    Kohana最初是CodeIgniter的分支,这足以让我一开始不使用它。如今,它已发展成为一个坚实而优雅的框架,它通过遵循MVC分层方法而彼此区别。HMVC 比MVC允许更大程度地扩展模块化。对于图中的项目,我将Kohana的HMVC修改为ZF,但我已经开始将Kohana用于较小的项目,并考虑将其用于较大的项目。

  • CodeIgniter

    我之所以只使用它,是因为我继承了一个旧项目,请尽量避免。

正如其他答案所指出的那样,ORM总是很方便。我广泛使用了Doctrine,您应该看一下其针对CouchDBMongoDB的全新映射器。在大规模应用程序中,可伸缩性是必须的,您应该评估NoSQL解决方案

综上所述,要记住的重要一点是,大型应用程序通常会面临独特的挑战。您应该评估存在的每种流行的第三方解决方案,并且可能会从几个晦涩的解​​决方案中受益匪浅。当我第一次评估Recess时,它还远远没有准备好生产,但是它的方法实质上使它进入了项目。

性能

在典型的网站上,您可能不愿使用简单的输出缓存操作码缓存,但在大型应用程序上,您应该真正考虑内存缓存,最常见的是围绕memcached构建的。

xdebug通常被称为调试器,但也可以用作探查器。我最近开始使用Zend Server,我绝对喜欢它的代码跟踪功能。不幸的是,社区版中没有这些功能,但是xdebug是一个不错的选择。

如果您使用的是Apache,请确保对其进行优化Nginx的lighttpd的显然更好的选择,性能明智的,但我没有用他们很多,我真的不能说。

对于数据库,Doctrine的查询和结果缓存非常有用,特别是与memcached结合使用时。当然,我们不能忘记前端。雅虎的卓越绩效团队汇集了广泛的最佳实践清单。我并不是真正的前端开发人员,但是我已经在个人项目中看到了惊人的结果。

最后,PHP具有全新的垃圾回收机制,值得研究。

安全

至少可以说,PHP安全世界是混乱的。我不是专家,因此请将以下内容视为一般性提示:

  • 开放式Web应用程序安全项目

    里面有很多好东西,但是要快速浏览一下,您应该从前十名开始。并针对这些常见漏洞研究PHP解决方案。

  • 堆栈漏洞

    一个好习惯是定期监视PHP的打开的bug。即使您自己不是专家,也几乎总是存在有关安全威胁的变通方法提示。当然,您应该将习惯扩展到堆栈的每个其他部分,尤其是最易受攻击的部分,例如Web服务器和数据库。

IT Security Stack Exchange上的人群可以为您提供更多有教益的答案。

进一步阅读


1
好答案;精彩的演讲;很棒的布局...很棒的工作!
动态

@Jae谢谢!你看完了吗?:P它有点长,我想知道是否应该修剪一下。
尼斯2012年

哈,我试过了!;-)
动态

实际上,Yannis,我有一个问题要问您。我最近对PHP非常感兴趣。我一直在尝试自己学习,但是遇到了麻烦。看来您自己对PHP也很满意:-)。您愿意分享一些指导吗?如果是这样,我将创建一个聊天室。
动态

那就是我一直在寻找的答案!它吸收了很多信息,我认为我在下一个小时必须做一些吸收和修改的工作,但是您已经给了我一些起点。谢谢:)
布拉德·莫里斯

1

IBM的developerWorks网站上有大量PHP文章,其中很多都很好。他们有一系列比较PHP Web框架的文章,以及一系列有关使用CakePHP框架的网站的文章

O'Reilly的旧“ Onlamp”网站上有一篇有关PHP中MVC文章。该文章的作者进一步详细解释了MVC

奥赖利(O'Reilly)的文章有些陈旧,但可以帮助您前进。IBM developerWorks的东西真的很好,可以满足您的许多需求。


1

我从事PHP已有几年了。我完全同意Yannis的观点,这个问题还是有待解决的,我想我会为您提供一些建议。首先,正如Yannis所说,您应该研究MVC,为此,我可以推荐的两个框架是CodeIgniterSymfony。第一个是轻量级的,并且非常容易上手,但是,您可能只需要添加一些额外的自定义项即可使设置工作正常,很快就会投入使用。Symfony是由Fabien Potencier启动的一个项目,使用软件工程中的许多设计模式,但是,学习曲线CodeIgniter的陡峭得多。

现在,第二,您应该研究数据库连接,它使我进入了两个最著名的PHP ORM框架DoctrinePropel。我个人很喜欢Propel,甚至写过关于如何在基于CodeIgniter的应用程序上设置干净的Propel安装的文章,但是Symfony更受Doctrine的欢迎,但您可以使用其中任何一个。如果您想进一步了解Doctrine和Propel,请看一下我前段时间提出的这个问题

最后,您应该研究一个模板框架,例如SmartyDwooTwigg聪明人是最古老的,因此也是最稳定的。Dwoo 继承Smarty,并添加了一两个东西来更好地支持PHP 5上的OOP。最后,Twigg是提供Symfony团队的模板替代产品,我本人还没有看到它,但是如果它来自Symfony团队, 那就太好了

希望整个演讲有道理,大卫

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.