首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP应用程序体系结构/设计

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

Software Engineering用户
提问于 2012-01-28 15:40:29
回答 2查看 40.1K关注 0票数 21

我已经被抛到了头-第一份新的工作,开发网页应用程序的PHP。我对PHP并不陌生,但我以前还没有开发过大规模的应用程序。我想知道如何组织我的发展,以避免设置自己在未来的问题。如何以合理的方式设计和架构我的应用程序,使它们能够在功能和性能方面随着时间的推移而扩展。我在想这样的事情:

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

我希望了解架构和应用程序设计模式、框架和方法的指针,它们允许我以可持续的方式来处理大规模的PHP应用程序开发。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2012-01-28 22:22:29

我参与的最新大规模项目的架构简图。

它只是一个基本的大纲,从实际的体系结构文档中改编而来,并以类似于典型n层方法与典型MVC方法相结合的方式呈现。如您所见,逻辑层和数据层是通过服务层连接的,更具体地说,休息是由凹槽 (一种不太知名的PHP框架)启发而来的。

不要重新发明车轮

我有三个框架:

  • Zend框架是PHP的庞然大物,具有令人印象深刻的写得好的代码基和广泛的特性列表。在大规模应用程序中,您会发现自己经常调整框架,我发现ZF的代码库是最适合使用的。但要小心,这不是入门级框架
  • 科哈纳 Kohana最初是CodeIgniter的一个分支,这是我最初不使用它的理由。如今,它已经发展成为一个坚实而优雅的框架,它通过遵循分层MVC方法来区别于其他所有的框架。HMVC允许使用模块化的扩展比MVC更大。对于图中的项目,我将Kohana的HMVC应用于ZF,但我已经开始将Kohana用于较小的项目,并将其考虑为更大的项目。
  • CodeIgniter我使用它只是因为我继承了一个遗留项目,如果可能的话,避免使用它。

正如其他答案所指出的,ORM总是有用的。我广泛地使用教条,您应该看看它的全新地图 for CouchDBMongoDB。在大规模应用程序中,可伸缩性是必须的,您应该评估NoSQL解

所有这些,重要的是要记住的是,更大的应用程序通常有独特的挑战。您应该评估存在的每一个流行的第三方解决方案,并且您可能会从一些晦涩难懂的解决方案中获益很多。当我第一次评估休会的时候,它还远远没有准备好生产,但是它的方法基本上使它进入了项目。

性能

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

X侦错通常被称为调试器,但也可以充当轮廓仪。我最近开始使用Zend服务器,我非常喜欢它的代码跟踪特性。不幸的是,这些在社区版中是不可用的,但是xdebug是一个相当不错的替代方案。

如果您正在使用Apache,请确保使用把它优化掉nginx莱特普在性能上都是显然更好的选择,但是我并没有经常使用它们,而且我也说不出来。

至于数据库,Doctrine的查询和结果缓存非常有用,特别是与梅卡奇相结合。当然,我们不能忘记前端。雅虎的超常性能团队已经收集了一份广泛的最佳做法列表。我并不是一个真正的前端开发者,但我已经看到了令人惊讶的结果的独奏项目。

最后,PHP有一个全新的垃圾收集机制,值得一看。

安全

至少可以说,PHP安全的世界是混乱的。我不是专家,所以把以下几点当作一般性的提示:

  • 开放应用程序安全项目很多东西都是很好的东西,但是要想快速地了解一下,您应该从前十名开始。并研究针对这些常见漏洞的PHP解决方案。
  • 堆栈漏洞一个好习惯是定期监视的开放。即使你自己也不是专家,在安全威胁方面也几乎总是有一些解决办法。当然,您应该将这种习惯扩展到堆栈的每一个其他部分,特别是最易受攻击的部分,比如web服务器和数据库。

IT安全栈交换的人群可以帮助你得到更有教养的答案。

再读

票数 33
EN

Software Engineering用户

发布于 2012-01-28 18:11:40

IBM的developerworks网站有一个大量文章,其中很多都很好。他们有一个比较框架的系列文章,还有一个关于使用CakePHP框架的网站的系列。

O‘’Reilly的旧"Onlamp“网站有一个关于中的MVC的文章。这篇文章的作者接着谈到了详细解释MVC

奥莱利的文章有点旧,但它们会让你走的。的内容非常好,涵盖了很多您想要的内容。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/132275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档