【问题标题】:How relevant are OO design patterns to web development in PHP?OO 设计模式与 PHP 中的 Web 开发的相关性如何?
【发布时间】:2010-03-10 03:01:00
【问题描述】:

Singleton、Decorator、Abstract、Factory,不胜枚举。面向 Web 开发 PHP 应用程序时,OO 设计模式的相关性如何?它对性能有什么帮助吗?或者只是为了敏捷开发实践保持代码精简?谁是实现这些设计模式的主要恩人?是客户还是开发商?

我意识到我在问多个问题,但它们都与同一个主题有关。我不确定是否需要使用脚本语言的 OO 设计模式,因为它是在运行时编译的。大家怎么看?重要吗?

【问题讨论】:

    标签: php design-patterns oop


    【解决方案1】:

    创建设计模式是为了解决特定问题。无论您使用 PHP 还是任何其他语言,都会出现这些问题(尽管模式也可能因语言而异)。大多数模式都源于面向对象的设计,但可以适应过程设置。当您遇到模式解决的问题时使用设计模式,无论是 PHP 还是任何其他语言。不要仅仅因为它是一种“设计模式”而使用设计模式——要知道它如何以及何时应用以及何时不适用。

    话虽如此,设计模式所做的大部分工作就是组织代码以一种清晰、易于理解的方式实现其目的。还有其他方法可以解决问题,但设计模式是一种公认​​的、清晰的、易于理解的方法。如果您确实需要解决由特定模式解决的问题,通常最好使用该模式(或调整该模式),而不是选择替代方案。

    因此,在适当的情况下使用模式对当前和未来的开发人员(更清晰、更易于理解的代码)和客户都有益,从而减少重新发明轮子的时间、更健壮、可维护的代码。在不合适的情况下使用模式对任何人都没有好处;尝试调整模式来解决不相关的问题可能是一种挫败感练习,而且很可能只会让事情变得更复杂。

    【讨论】:

    • 很好的答案!网络上是否有任何地方可以找到有关学习识别模式以及何时使用它们的教程?学习它们的最佳方法是什么?
    • PHP|Architect 有一本关于 PHP 中的设计模式的书,我发现这本书很有帮助,因为它解释了每种模式在语言上下文中的工作方式。学会识别它们是什么以及何时使用它们......这有点难,它只是伴随着练习。
    • 四人帮 (c2.com/cgi/wiki?DesignPatternsBook) 是一个不错的起点,但需要将实现翻译成 PHP。模式本身的格式告诉你模式解决了什么问题。一个好的起点是维基百科条目:en.wikipedia.org/wiki/Design_Patterns
    【解决方案2】:

    面向 Web 的 PHP 应用程序开发与 OO 设计模式的相关性如何?

    IMO 它们与任何重要的 PHP 应用程序都非常相关,只要您使用的模式适用于手头的问题。

    它对性能有什么帮助吗?

    不一定,你可以从正面和负面的角度来看待它。大多数流行的设计模式不会直接增加任何积极的性能优势,并且一些强加更多继承或类结构的设计模式可能会增加可忽略的性能成本(我强调可忽略不计)。在适用的情况下,使用众所周知的模式的好处超过了这些微不足道的成本。

    我能想到的一个示例可以直接提高“性能”(关于内存使用),这就是单例模式的适当使用。如果您在任何给定时间确实只需要一个对象的一个​​实例,那么您可以通过使用该实例来最小化内存使用量。

    或者只是为了敏捷开发实践保持代码精简?

    我想说正确使用模式可以使代码更易于维护,而不是“精简”。这将促进任何开发周期,包括敏捷,因为使用众所周知的模式的代码更易于阅读。

    谁是实施这些设计模式的主要受益者?是客户还是开发商?

    主要是开发人员(特别是如果是多个开发人员,一个团队必须处理相同的代码。)对客户有间接影响,因为编写良好的代码显然会减少错误,并且使用模式的软件可能会因重新发明轮子而缩短周转时间。

    【讨论】:

    • 我同意您的所有反馈。那么为什么这么多中小型“客户”更喜欢使用经验不足/便宜的编码器呢?也许他们只是不在乎胆量看起来如何,只要它有一个大引擎并且油漆有光泽,嗯?
    • 我认为中小型客户更喜欢更便宜的编码器只是因为它们更便宜。如果要在编写意大利面条代码的廉价开发人员和编写出色代码的更昂贵的开发人员之间进行选择,许多客户,尤其是对承包软件开发不熟悉的客户,会选择廉价的开发人员。好的代码很难量化。更有经验的中小型企业会稍微了解要寻找什么,或者至少会认真考虑您的投资组合。
    【解决方案3】:

    是的,但您必须为平台选择正确的模式。到目前为止,最重要的 OO 设计模式是 MVC(模型-视图-控制器),所有主要框架(CakePHP、CodeIgniter 等)都使用它。

    【讨论】:

    • 我是 CakePHP 和 MVC 的忠实粉丝。我相信它肯定会为您的代码库带来结构。但是 MVC 是一种设计模式还是一种架构?还是模式/架构是同义词?
    • 它是一种架构模式还是一种设计模式可以争论,但 MVC 是现代 Web 开发的一种基本模式 - 组织代码,使其更加模块化,可维护等......
    • 我同意,我喜欢使用 MVC。它只是让一切变得更容易。
    【解决方案4】:

    使用 OOP 与非 OOP 方法,performance 可能略有不同,非 OOP 的速度要快,但几乎可以忽略不计。

    我认为 OO 设计模式有利于代码组织,但设计问题由您决定。我认为你会比用户受益更多。无论您使用 OOP 还是非 OOP,用户都可以看到相同的结果。

    【讨论】:

    • 伟大的洞察力!我从我一生中审查过的所有代码中注意到,其他人也有同样的感觉。一旦你弄清楚其中发生了什么,有些代码会比编写更新需要更多的时间。
    • 就我个人而言,我喜欢 OOP 方法。当我可以在几个地方进行更改时,它节省了我很多时间尝试更改所有代码。
    【解决方案5】:

    什么算法(如快速排序)适用于过程编程,设计模式适用于面向对象设计。它们是解决一些常见问题的行之有效的方法。

    主要受益者是devolper - 但作为副作用,客户可能会获得更好的最终产品。

    它们是否相关,取决于您选择的某些应用程序要求和方法。这听起来可能很简洁,但是当您开始分析您的应用程序并将其设计要求与现有模式进行比较时,您就会知道如何以及何时使用它们。

    【讨论】:

    • 以什么方式更好?我知道很多客户宁愿付给高中生 500 美元来粘贴他们的网站,也不愿付给工程师 1500 美元来建造一些壮观的东西。那么我们如何让客户意识到他们通过招聘经验获得了“更好”的东西呢?
    • 通常面向对象的代码比过程代码更灵活,最终用户可以“接触”。当然,好的过程代码可以比不太好的面向对象代码表现得更好。一旦您熟悉了这些模式,您将变得更有效率 -> 有更多时间编写代码 -> 更好的代码 -> 更好的最终产品。但正如你所说,这一切都取决于客户的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2011-03-06
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多