【问题标题】:Architecture of very complex php applications?非常复杂的 php 应用程序的架构?
【发布时间】:2010-12-17 22:50:04
【问题描述】:

我想知道开发人员在复杂的 php 应用程序中使用了哪些 php 架构策略。到目前为止,我知道由模型、视图和控制器组成的 mvc 结构(以及处理常见任务的控制器插件,例如用户访问控制器)。我知道一些很好的 php 框架,它们使一些常见的东西更容易。但是当我对庞大而复杂的 php 应用程序感兴趣时,问题就开始了。因为在这些应用程序中,有很多事情要做或要检查很多思考,所以我无法决定哪些代码应该放在哪里。

想想 magento 应用程序,这是一个非常庞大的应用程序。当我查看应用程序的源代码时,我无法理解设计策略。我知道有一些完美的设计策略可以轻松处理非常大的 php 应用程序,因为它们无法使用非常弱的设计策略构建如此庞大的应用程序。设计策略应该支持比你想要的更多,所以你可以改进你的代码和轻松申请

总而言之,我想知道如何创建更大的应用程序。现在我在应用程序中使用的设计策略限制了我,所以我无法创建更复杂的应用程序。我想知道哪种设计策略可以处理复杂的应用程序。

我知道这是一个非常抽象的问题,但这是因为现在我的 php 背景来自业余爱好而不是学术。我想做更多,但我在某个地方我不能再进一步,因为我找不到关于编码的更复杂的信息。不管怎样,总而言之,我想了解复杂 php 应用程序(如 magento)的设计策略。

也许我知道的设计策略(mvc,框架 ci cake ...)可以处理比我想象的更复杂的应用程序..

如果我的问题中有一些错误,请随时纠正它们,对不起我的英语不好..

【问题讨论】:

    标签: php model-view-controller design-patterns oop


    【解决方案1】:

    我相信您的部分问题可能在于创建企业应用程序在任何语言中都是一个问题,并且可以实现的设计模式实际上与语言无关。

    我强烈建议您熟悉 Martin Fowler 的企业应用程序架构模式。这是您以后可能会选择的任何其他书籍的开创性工作,这些书籍以特定语言的格式涵盖相同的概念,如果您想真正了解在 Web 上创建强大、可扩展的应用程序需要什么,那么您将需要熟悉这本书。

    目前 Web 应用程序非常普遍和流行的设计策略是模型-视图-控制器范式。这完全与应用程序中的关注点分离有关,这样您就不会将数据库访问代码与 html 输出混合在一起。

    为了更好地处理该主题,我建议您查看here(Zend Framework 特定,但它很好地涵盖了一般主题)和here 专门讨论模型。或者如果你想看更通用的 PHP MVC 教程,Rasmus Lerdorf 有one

    除此之外(同样,您可以从 Martin Fowler 的 PofEAA 中学到这一点),您还需要了解对象-关系-映射以及各种设计模式的优缺点。

    不幸的是,有很多好方法可以根据您的需要做事,但对于每一种好的方法,都有无数可怕的错误方法。

    【讨论】:

    • 感谢您的回复。您提供的链接对我非常有用。我刚刚了解我的弱点,我的问题是“胖控制器 = 模型 + 控制器”问题。我认为限制我的应用程序的是我没有任何“有用”模型,我的模型只是带有框架数据库适配器的空类,并且我有巨大的控制器,里面有所有的逻辑。所以我认为我必须创建真正的模型
    • 。但我不确定为什么我需要创建特定的模型操作(例如用户模型的注册操作),即使我只会在 1 个控制器中使用它。我能找到的原因之一是测试能力。如果用户模型有注册方法,我可以测试它。如果您有更多对我有用的信息,我想学习。再次感谢您
    • @Oguz - 您是否熟悉与面向对象编程相关的不要重复自己、单一职责原则或封装?
    【解决方案2】:

    您检查过哪些框架?如果您还没有,请检查 symfony、Zend Framework 和 CakePHP。通过检查,我的意思是实际上使用这些框架编写中型应用程序。仅仅阅读代码通常不足以了解它是如何工作的。您经常必须实际使用它并尝试对其进行修改。

    您可能还想查看PHP 5 Objects Patterns and Practice 这本书,了解一些可以应用于您的应用程序的设计策略的想法。通过学习用其他语言编写的框架,您也可以学到很多东西。例如,许多 PHP 框架的设计者深受 Ruby on Rails 的启发。

    【讨论】:

      【解决方案3】:

      这确实是一个非常抽象的问题,“非常复杂”并不是很具体。当我听到人们谈论“复杂”的应用程序时,我会将其与

      a) 有人为一个简单的问题使用复杂的架构。例如。通过使用每个听起来很酷的设计模式和框架。

      b) 有人试图将大量完全不同的用例压缩到一个历史悠久的应用程序中,创建和使用专有和未记录的接口,并将所有内容尽可能紧密地耦合在一起。不幸的是,可以使用糟糕的设计策略构建大型应用程序,这就是使它们变得复杂的原因。

      c) 遗留系统和遗留系统集成(请参见 b)

      Magento 可能是个大应用,但底层的Framework 还是Zend Framework,主要是它的MVC 部分。因此,阅读 Zend_Framework 文档也将有助于您了解 Magento 架构(我不建议通过 Magento 源代码深入了解 Zend Framework)。 我建议您自己开始使用其中一个 MVC 框架构建一个更大的应用程序,因为这是了解架构及其优势以及限制所在的最佳方式。

      【讨论】:

        【解决方案4】:

        如果您还没有,您应该研究面向对象的编程。关于 here 有一个非常棒的教程。我认为这可能是大型网络应用程序所做的最重要的事情,这对于业余爱好者(包括我自己)来说不一定是直观的。像 Code Igniter 这样的 MVC 框架的诀窍是构建一系列类(或对象)作为模型或库。

        【讨论】:

        • 如果他不了解 OOP,他会提到设计模式吗?
        【解决方案5】:

        好吧,即使您的问题只是关于 PHP... 如果您使用 PHP 处理静态内容(如图像),无论是否使用 MVC,都会导致性能不佳。你应该使用像 nginx 这样的前端来处理这些事情。

        看看http://highscalability.com/来自现实生活的真实故事!

        还要注意 NoSQL。

        【讨论】:

          【解决方案6】:
          【解决方案7】:

          我试图了解您的问题,发现 magento 架构非常强大但很复杂。我得到了Zendfox的解决方案,它是一个Web应用程序框架,适用于小型到大型应用程序的开发。它有非常可爱的应用程序架构,可以很容易地管理。它还拥有模块开发人员,可以在几分钟内为 zendfox 创建基于向导的自定义模块。

          所以看看:http://www.zendfox.com

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-11-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-30
            • 2010-12-08
            • 1970-01-01
            相关资源
            最近更新 更多