您使用什么PHP应用程序设计/设计模式?
请与我分享您最喜欢的PHP应用程序设计/设计模式。有些事情我想知道:您使用什么PHP应用程序设计/设计模式?,php,oop,software-design,Php,Oop,Software Design,请与我分享您最喜欢的PHP应用程序设计/设计模式。有些事情我想知道: 文件夹的设计方式 如何在PHP应用程序中使用对象定向 您是否有处理CRUD、分页或任何其他常见任务的标准方法 如何避免使用重复代码?你对库/共享公共代码等有什么看法 有哪些方法可以使代码更加优雅 你不必回答所有这些问题,回答其中任何一个或几个问题都会有帮助 我问这个问题的原因是,我已经厌倦了用PHP编写重复的、难看的代码,我想为我的自由职业项目创建一个小框架,这将使编程更容易,让我专注于具有挑战性的/业务任务,而不是表单验
- 文件夹的设计方式
- 如何在PHP应用程序中使用对象定向
- 您是否有处理CRUD、分页或任何其他常见任务的标准方法
- 如何避免使用重复代码?你对库/共享公共代码等有什么看法
- 有哪些方法可以使代码更加优雅
感谢所有意见 我几乎感觉自己是个破纪录的人,但我建议您看看一些常见的框架,原因有两个:
为了回答您的一些问题,我建议您研究Martin Fowler的企业应用程序体系结构模式。他就如何解决这些常见问题(如如何在应用程序中创建数据库交互层)提供了许多有价值的见解。Fowler还介绍了MVC和FrontPage Controller等主题。我已经解释了我的大部分PHP方法 但是现在,我在任何地方都可以使用Django。当我第一次厌倦混合代码和html时,我开始使用模板引擎。经过一段时间的黑客攻击,我意识到编写自己的框架只是重复工作 我已经用CMS做了一些项目,这确实是一个CMS,但它让客户对内容有很大的控制
最终,我决定为我的项目使用一个真正的框架。我正在使用,它的灵感来自Rails,并且有很好的文档记录,但我听说过,而且也非常好。我必须同意上面的海报。如果您在用PHP编程时没有使用框架,那么您实际上是双手绑在背后编程。我个人推荐。它是最快的框架,非常容易学习,并且有一个非常活跃的社区。框架将回答您的所有问题:
* How your folders are designed
CodeIgniter(或任何框架)将您的逻辑划分为视图、模型和控制器,每个视图、模型和控制器都有自己的文件夹
* Do you have a standard way of dealing with CRUD, pagination, or any other common tasks?
CI有一个分页库,它还有第三方库,如DataMapper,用于以面向对象的方式(ORM)包装CRUD调用
模型、视图和控制器的分离使得代码非常优雅
(在使用该框架时,我没有回答的两个问题相当含蓄)我使用Zend framework,它几乎定义了文件夹布局和OOP(MVC范式)。对于常见任务,例如分页,我使用
Zend\u Paginator
(我的模型类实现Zend\u Paginator\u Adapter\u接口
),对于验证,我使用了Zend_Validate
类等。由于这一点,我可以完全专注于业务逻辑,而不是重新发明轮子。我想很多php开发人员都遵循了类似的路线:小脚本->过程/内联代码->可能是模板->面向对象->然后是框架。我认为,对于一个PHP开发人员来说,学习设计模式以匹配当前版本的可用特性是很常见的
MVC是当今流行框架中最常用的设计模式。这是我的选择框架,尽管它也非常受欢迎——它非常值得尝试一些,并且很快就会变得明显,哪一个你觉得最舒服
对于大多数项目(快速开发和可移植代码是优先事项),我使用Cake,但是对于轻量级应用(我最近开发的一个),您希望快速运行(在低规格硬件上)而且不需要通过我推荐阅读Rasmus Lerdorf关于他的文章的大型框架的功能来增加体积/重量
基本上,如果你追求的是一种真正的面向对象语言,它鼓励漂亮的代码和最好的设计
* What are ways in which you can make your code more elegant?
root
app
config (db config, routing config, misc config)
doctrine (fixtures, migrations, generated stuff, etc)
lib
logs
models (doctrine models)
modules (zend mvc modules)
bootstrap.php
docs (db diagrams, specs, coding standards, various docs)
pub (web root)
tests
tools (console tools, i.e. doctrine-cli)
vendor (zend and doctrine libraries, preferably as svn-externals)