请与我分享您最喜欢的应用程序设计/设计模式以供PHP使用。我想知道的一些事情:
您无需回答所有这些问题,回答其中任何一项或几项都会有所帮助。
我之所以这么说,是因为我厌倦了在PHP中编写重复的,丑陋的代码,我想为我的自由职业项目制作一个小框架,这将使编程更容易,让我专注于挑战/业务任务,而不是表单验证,分页和其他普通活动,占PHP编程工作的80%
所有观点赞赏!
答案 0 :(得分:70)
我可能会因此而被投票,但如果你真的想写自己的框架,我会说,因为你会从经验中学到很多东西。这里提到的其他框架都很棒且经过测试,您不会使用它们做出错误的决定,但这是您的选择。
在开始编写框架之前,先看看其他框架(根据它们的语法,目录结构,命名架构,设计模式等),然后试着弄清楚为什么他们会做他们做了什么以及做什么,如果有的话,你会做的不同。尝试一些教程并使用他们的代码,制作一些示例应用程序。如果在执行此操作后,您不喜欢使用它们,那么请继续并开始规划您的框架,保持有效的工作并改进其中的工作。
如果您决定自己动手,我会根据自己的经验推荐以下几点:
答案 1 :(得分:13)
我必须同意上述海报。如果你在使用PHP进行编程时没有使用框架,那么你的双手背后就会编程。我个人推荐CodeIgniter。它是最快的框架,它非常容易学习,并且拥有一个非常活跃的社区。框架将回答您的所有问题:
* 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调用。
* What are ways in which you can make your code more elegant?
模型,视图和控制器的分离使得代码非常优雅。
(使用框架时,我没有回答的两个问题非常暗示)
答案 2 :(得分:9)
我想很多php开发人员都遵循类似的路线:小脚本 - >程序/内联代码 - >可能看看模板 - > OOP - >然后是一个框架。我认为PHP开发人员可以通过PHP“成长”,学习设计模式以匹配当前版本的可用功能。
MVC是当今流行框架中最常用的设计模式。 CakePHP是我选择的框架,虽然Symphony和Zend也非常受欢迎 - 非常值得尝试一些,并且很快就会变得明显让您感到最舒服。
对于大多数项目(快速开发和可移植代码是优先考虑的事项),我使用Cake,但对于轻量级应用程序(我最近开发的应用程序Good Baad),您希望快速运行(低规格)硬件)并且不需要通过其中一个大框架的功能添加批量/重量我建议阅读Rasmus Lerdorf关于他No Framework PHP MVC framework的文章。
基本上,如果你追求一种真正的面向对象的语言,鼓励漂亮的代码和最好的设计实践PHP总是会失去Ruby Python和C#等。但是,PHP有其优势,例如不需要模板语言(它是一个),PHP可以非常快速和廉价地运行,并且不需要所有应用程序的大型框架的重量。
我鼓励采用一种设计模式,将MVC等设计模式的可管理性与PHP的优势结合起来。
答案 3 :(得分:8)
我几乎感觉自己像是一张破纪录,但我建议你看看一些常见的框架有两个原因:
说到使用可以轻松扩展的框架,我对Zend Framework有了非常积极的体验。它的内聚性和松散耦合结构使得可以快速,轻松地扩展任何现有组件,整个框架的设计理念是您需要编写自己的帮助程序和插件类来添加其整体功能。
我发现Zend Framework是如此完全灵活,以至于我运行一个网站作为Zend Framework MVC的一部分,并且是我旧的糟糕框架,甚至是我还没有重写过的更古老的代码。事实上,因为在重写过程中我们发现一个页面使用旧框架运行速度慢得令人无法接受,我已经将单个页面切换到Zend Framework架构下运行。
为了回答您的一些问题,我建议您查看Martin Fowler的企业应用程序架构模式。他提供了许多有关如何解决许多常见问题的宝贵见解,例如如何在应用程序中创建数据库交互层。 Fowler还涵盖了MVC和Front Page Controller等主题。
答案 4 :(得分:2)
我已经解释了我的大部分PHP方法here。
但是现在,我只能在任何地方使用Django。
答案 5 :(得分:2)
当我第一次厌倦了混合代码和HTML时,我开始使用smarty模板引擎。经过一段时间的黑客攻击后,我意识到编写自己的框架只是重复工作。
我用Joomla完成了一些项目,这实际上是一个CMS,但它让客户能够对内容进行大量控制。
最终我决定为我的项目使用真正的框架。我正在使用symfony,它受到Rails的启发并且有很好的文档记录,但我听说cakePHP和ZendFramework也非常好。
答案 6 :(得分:2)
我使用Zend Framework,它几乎定义了文件夹布局和OOP(MVC范例)。对于常见任务,例如分页,我使用Zend_Paginator
(我的模型类实现Zend_Paginator_Adapter_Interface
),为了验证,我使用Zend_Validate
类等。由于我可以完全专注于业务逻辑而不是重新发明轮子。
答案 7 :(得分:2)
使用Zend Framework和Doctrine,我的文件夹结构通常如下所示:
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)
答案 8 :(得分:1)
我一直在乱写自己的东西已经有一段时间了,每次我都无法完全完成它,因为我被困在某事上。
然后是我开始意识到我是否做得对的部分。
因此,我已经放弃了自己写一个最喜欢的人群:Zend。
我看着其他人,但似乎Zend已经有一段时间了,他们知道他们的事情。
MVC也是我现在用我写的任何东西的方式。