您使用什么PHP应用程序设计/设计模式?

您使用什么PHP应用程序设计/设计模式?,php,oop,software-design,Php,Oop,Software Design,请与我分享您最喜欢的PHP应用程序设计/设计模式。有些事情我想知道: 文件夹的设计方式 如何在PHP应用程序中使用对象定向 您是否有处理CRUD、分页或任何其他常见任务的标准方法 如何避免使用重复代码?你对库/共享公共代码等有什么看法 有哪些方法可以使代码更加优雅 你不必回答所有这些问题,回答其中任何一个或几个问题都会有帮助 我问这个问题的原因是,我已经厌倦了用PHP编写重复的、难看的代码,我想为我的自由职业项目创建一个小框架,这将使编程更容易,让我专注于具有挑战性的/业务任务,而不是表单验

请与我分享您最喜欢的PHP应用程序设计/设计模式。有些事情我想知道:

  • 文件夹的设计方式
  • 如何在PHP应用程序中使用对象定向
  • 您是否有处理CRUD、分页或任何其他常见任务的标准方法
  • 如何避免使用重复代码?你对库/共享公共代码等有什么看法
  • 有哪些方法可以使代码更加优雅
你不必回答所有这些问题,回答其中任何一个或几个问题都会有帮助

我问这个问题的原因是,我已经厌倦了用PHP编写重复的、难看的代码,我想为我的自由职业项目创建一个小框架,这将使编程更容易,让我专注于具有挑战性的/业务任务,而不是表单验证、分页,以及其他平凡的活动,它们占PHP编程工作的80%


感谢所有意见

我几乎感觉自己是个破纪录的人,但我建议您看看一些常见的框架,原因有两个:

  • 即使你选择不使用,其中一些是非常好的书面和非常好的设计。我特别喜欢Zend框架,但稍后我会回到这一点
  • 问问你自己,你为什么要重新发明轮子。你真的觉得你比背后的社区(在这里插入框架选择)更了解其他人面临的相同设计问题,从而证明从头开始写东西是合理的吗?作为一个最初研究了几个框架并认为它们太大、呈现了太多的学习曲线或太多的开销并开发了我自己的框架的人,我可以告诉你,如果你可以简单地使用一个可以轻松扩展的现有框架,那么从头开始编写自己的框架是一件非常痛苦的事情
  • 说到使用易于扩展的框架,我对Zend框架有过非常积极的体验。它具有内聚性和松散耦合的结构,可以快速轻松地扩展任何现有组件,整个框架的设计理念是,您需要编写自己的帮助器和插件类来添加到其总体功能中

    我发现Zend Framework非常灵活,我只运行一个网站,作为Zend Framework MVC的一部分,我的旧框架的一部分,甚至是我还没有重写的旧代码。事实上,因为在重写过程中,我们发现一个页面在使用旧框架时运行速度慢得令人无法接受,所以我将单个页面切换为在Zend框架架构下运行


    为了回答您的一些问题,我建议您研究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)