【问题标题】:Design patterns vs Frameworks设计模式与框架
【发布时间】:2008-11-26 09:27:24
【问题描述】:

有人能说明两者之间的真正区别吗?

【问题讨论】:

  • 四年后回想起来,这真是一个愚蠢的问题。
  • 这是一个愚蠢的问题,显然对人们有帮助,因此不是一个愚蠢的问题;)
  • 我不认为这是一个愚蠢的问题:)
  • 这当然不是一个愚蠢的问题。框架 vs 库是另一个有趣的问题。
  • 作为 JavaScript 新手,我应该学习设计模式还是只使用 React、Angular、Vue 等框架?

标签: design-patterns frameworks


【解决方案1】:

设计模式是一个概念,或者是如何完成特定问题的收据。

框架是可供使用的代码,通常以一种更容易创建应用程序的方式打包。

解释这些差异是没有意义的,因为它们是两个完全不同的东西。

【讨论】:

  • 忍不住:“设计模式是一种克服源语言缺陷的技巧。框架是可以使用的代码......”
  • 一个框架可以包含/使用一个或多个设计模式(以及架构模式),但一个设计模式不能包含一个框架。
【解决方案2】:

尽管它们是两个非常不同的东西,但可以说它们都解决了软件架构问题

  • 设计模式通过不同的预定义设计解决了许多软件架构问题(关于创建、行为、并发性等)。 (设计为implementation of an architecture topic

  • 一个框架基于Hollywood Principle(“不要打电话给我们,我们打电话给你”),您可以在其中实现指定的一些高级要求,并让框架完成其余的工作,调用你的实现。

一个关键的区别是范围凝聚力

  • 设计模式有一个 紧密 范围

    • 类设计模式(涉及类)
    • 业务设计模式(涉及业务工作流程)
    • 应用程序设计模式(涉及应用程序)
  • 框架有一个 范围
    例如,.NET is a framework 由以下部分组成:

    • 一种语言 (C#)
    • 运行时环境 (CLR)
    • 图书馆集合
      只需开发您需要的内容,然后让 .Net 框架调用您的类。

【讨论】:

    【解决方案3】:
    |------------------------|
    |          (------)      |
    |          (ClassA)      |
    |          (------)      |
    | (-----------)          |
    | ((Singleton))          |
    | (-----------)          |
    |         (---------)    |     
    |         ((Factory))    |
    |         (---------)    |
    |                        |
    |                        |
    |------------------------|
    
    Legend:
      |---|  Framework
      (---)  Class
      ()     Design Pattern
    

    框架是一组执行特定任务的相关类。这些类可能会也可能不会实现某种设计模式。

    【讨论】:

    • 嘘,使用计数单例作为设计模式,+1 很好的解释。 :-P
    • 它是一种设计模式,不管它是否被过度使用和误用。 :P 感谢您的支持。
    【解决方案4】:

    这是GOF的回答:

    因为模式和框架具有 有些相似之处,人们常常想知道 它们如何或即使它们不同。他们是 在三个主要方面有所不同:

    • 设计模式更加抽象 比框架。框架可以 体现在代码中,但只是示例 的模式可以体现在代码中。 框架的优势在于 它们可以写在 编程语言,不仅 研究但执行和重用 直接地。相比之下,设计 本书中的模式必须是 每次使用时执行。 设计模式还解释了 意图、权衡和后果 的设计。

    • 设计模式更小 建筑元素比 构架。一个典型的框架 包含多种设计模式, 但反过来永远不会正确。

    • 设计模式不太专业 比框架。框架总是 有特定的应用 领域。图形编辑器框架 可能在工厂使用 模拟,但不会弄错 用于模拟框架。在 相比之下,设计模式在 这个目录几乎可以用在 任何类型的应用程序。虽然更多 专门的设计模式比 我们的当然是可能的(比如说, 分布式设计模式 系统或并发编程), 即使这些也不会决定 应用程序架构像 框架会。

    【讨论】:

      【解决方案5】:

      设计模式是用于解决问题的成熟设计。框架是用于简化构建应用程序的实际代码包。请注意,框架可以并且可能会使用设计模式。

      【讨论】:

        【解决方案6】:

        来自Xiaoping JiaObject-Oriented Software Development Using Java

        虽然设计模式和框架都是用于捕获可重用设计的机制,但它们是完全不同的。一方面,设计模式是可重用设计的示意图描述,它们不是具体的程序,并且与语言无关。另一方面,框架是用特定编程语言编写的可编译程序,通常包含抽象类和接口。设计模式是框架的架构构建块。它们有助于使框架可扩展和可重用。框架通常包含许多协作设计模式的实现。

        【讨论】:

          【解决方案7】:

          模式支持软件架构和设计的重用 - 模式捕获静态和动态结构以及成功解决在特定领域构建应用程序时出现的问题的协作

          框架支持重复使用细节设计和代码 - 框架是一组集成的组件,它们协作为一系列相关应用程序提供可重用的架构

          设计模式和框架共同有助于提高软件质量并缩短开发时间。

          【讨论】:

            【解决方案8】:

            设计模式是众所周知的(设计)问题的标准解决方案。例如,工厂模式和抽象工厂模式为实现设计以克服实例化对象的常见问题提供了蓝图。

            另一方面,框架包含基础架构,您可以使用和扩展这些基础架构来开发自己的解决方案。例如,模型 2“Web 应用程序框架”将包含用于构建基于 Web 的应用程序的基础设施。它将包含控制器、一些 gui 元素和基类,我们可以扩展它们以创建我们的模型和业务逻辑。通常它包含我们从基类扩展时继承的管道代码和交互。框架的一些示例是 Struts、JSF、Swing 应用程序框架、JUnit 测试框架等......

            更进一步,我们还可以直接从代码中使用这些库。通常不扩展他们的类。 Log4J 就是一个库的例子。

            【讨论】:

              【解决方案9】:

              框架更具体地用于问题定义。为了编写一个设计模式,可以在任何适用的地方设计或使用。

              【讨论】:

                【解决方案10】:

                答案很简单: 框架:系统的元素(例如(组件、层、类...)必须或应该如何相互交互

                设计模式:高频问题的解决方案。它可能是 MSSQL 源代码到 oracle 的转换,...​​..... 并且有 3 种类型:分析、设计和实现模式。

                【讨论】:

                  【解决方案11】:

                  模式:一组指导线,构建应用程序。

                  框架:遵循特定模式,一组预构建类和库以创建架构模式。

                  【讨论】:

                    【解决方案12】:

                    虽然我认为缺少一个具体的例子,但这个问题已经得到了几种不同的回答。

                    设计模式:一组用于解决重复出现的问题的规则。规则定义模式。没有代码可以复制粘贴来实现这一点。开发人员应该理解规则然后实施它们。

                    例子:

                    • 名称:测试驱动开发 (TDD)
                    • 问题:它确保编写的单元测试涵盖足够的案例场景,让您对自己的生产代码充满信心。
                    • 规则:它规定您应该先编写测试,然后再编写代码以通过这些测试。这样可以确保您不是为了通过代码而编写测试,而是为了通过测试而编写代码。

                    设计模式分为 3 类:

                    • 创意设计模式:
                    • 结构
                    • 行为

                    我发现 this link 有助于解释它们。


                    框架:不要与库混淆,框架是系统的基本结构,允许开发人员以标准化方式构建和部署软件应用程序。

                    示例:.Net Core 框架是一种工具,其中包含一组库,使开发人员能够使用 Microsoft 堆栈编写可部署在多种不同环境(Windows、Mac OS、Linux)中的软件应用程序


                    :一组可重用的方法/类放在一个包中以提供功能。

                    示例:System.Collections.dll 库使 .Net 开发人员能够使用诸如 Hashtable 之类的东西。


                    看看其他答案也是值得的,因为有时它只是一个流行词,并且因环境而异。看here

                    我希望这会有所帮助。

                    【讨论】:

                      猜你喜欢
                      • 2010-11-14
                      • 2011-10-15
                      • 2011-11-30
                      • 1970-01-01
                      • 1970-01-01
                      • 2010-09-17
                      • 2012-03-06
                      • 1970-01-01
                      • 2012-06-07
                      相关资源
                      最近更新 更多