【问题标题】:Design pattern frustrations设计模式的挫折
【发布时间】:2011-01-19 12:52:17
【问题描述】:

我是一名拥有 4 年 .Net 编码经验的开发人员,在我的职业生涯中从不关心设计模式。最近我被要求与 IT 中的一位大人物进行面试,已经完成了 5 轮(问题解决、结对编程、逻辑推理、2 轮技术面试)的面试,但没有提供工作。

虽然他们对我的技术和逻辑推理能力感到满意,但我从他们那里得到的反馈是不擅长设计原则。这让我觉得了解设计模式是解决问题的唯一方法?

虽然我在编码中从未使用过多的设计模式,但我总是试图实现 OOPS 的基本原则

我可以使用这些原则来设计一个松散耦合、开放以进行增强且易于维护的系统。最终,这些是所有设计模式的核心构造。

但我的问题是为正确的问题找到正确的模式。我知道这些知识不会仅仅通过阅读所有在设计模式和实践中出版的书籍来获得。这些知识来自于构建不同系统的经验。

模式问题匹配是否有可用的用例。您对学习设计原则的建议是什么?

干杯

【问题讨论】:

  • 我非常怀疑您从未在编码中大量使用过设计模式。使用 SOLID 原则通常会导致实现已知设计模式的代码。您很可能在代码中使用了设计模式,但不知道它们的名称或理解它们是命名模式。
  • 我很抱歉 - 也许是因为它是星期一早上......你的确切问题是什么?学习设计原则来自阅读领先设计师的书籍、研究他们的代码、尝试自己的玩具示例和实际工作经验……除了努力工作,没有简单的答案。
  • @Gishu,问题是我无法将模式与问题相匹配......任何问题,都可以用不同的方式解决......我如何预测单一模式非常适合我的问题等等。正如你所说,为此我必须有一个真实的体验。

标签: c# language-agnostic design-patterns


【解决方案1】:

虽然我认为熟悉设计模式不会有什么坏处,但我想确保您的问题中没有将两件事混为一谈。你说你得到的反馈是你应用设计原理的能力很弱,你从反馈中得出结论,你需要研究设计模式。但那是不同的。

“设计模式”是一种在许多不同领域中反复出现的模式。例如,在建筑中,您会在许多不同类型的建筑中看到“内院”的格局。在编程中,您会在许多不同类型的程序中看到诸如“只能有一个实例的类”或“将这个与那个粘合在一起的一小块代码”之类的模式。

但原则不是模式。模式是一种特定的反复出现的设计。原则是使设计对被设计工件的用户良好的基础的想法。

例如,JScript 语言的一个设计原则是“容忍小错误”。如果您为 11 月 31 日创建一个日期对象,它会默默地将其更正为 12 月 1 日,而不是给出错误。没有“小错误宽恕模式”。使设计具有容错性是一种设计原则 -- 当我们可以选择如何设计特定功能时,我们会考虑它与所有原则的契合程度 -- 其中一些是相互矛盾的 --并使用它们来指导功能的设计。

不是 C#的设计原则;其实相反的是C#的一个设计原则。设计原则本身没有好坏之分;它们是让设计对其目标用户群有益的指南。

在不了解模式的情况下编写代码意味着您的工具箱中没有使执行常见任务更容易的工具。在不了解设计原则的情况下编写代码意味着编写不一致、难以理解且与用户需求背道而驰的代码。两者都很重要,但它们非常不同。

【讨论】:

  • 很好的答案。不太确定这是否被选中!
  • @Eric,感谢您纠正我.. 我认为设计原则和模式是相同的.. 很抱歉造成混淆。实际上我想在我的帖子中传达设计模式。我会改正的。
  • 正如许多人所说,如果你只从书本上学习,你就无法学习。然而,学习设计模式会让你的大脑开始寻找它们解决的问题。看看这篇文章:norvig.com/21-days.html 不要紧张。招聘经理多次低估了我的能力和毅力;)
  • 糟糕,最后回复@Ramesh,虽然同意 Eric 对设计模式所做的工具箱类比。
  • @Eric Lippert,如果我理解正确,原则是软件设计的核心结构(LSV、OCP、.. 定义了设计可扩展、可重用软件的方式),所以这些原则是所有模式通用。但另一方面,模式为您提供了一种已经证明可以解决特定问题的方法......
【解决方案2】:

设计模式之所以被称为模式,是因为它们在许多独立程序中不断出现,而不是因为它们习惯于将程序组合在一起,就像将正方形拼接在一起一样被子。它们可以帮助解决软件问题,但它们本身并不是解决方案。

【讨论】:

    【解决方案3】:

    即使您使用 C#,我还是建议您阅读一些有关模式的书籍。首先是 GoF 书籍 - Design Pattens。然后尝试阅读一些关于企业设计模式的书。当您阅读时,您将识别(或看到)该模式。这通常是一个“啊哈”的时刻。

    您还将从自己的代码中识别出相同的内容。了解模式将帮助您进行良好的设计。它有助于了解模式,因为当出现与之相关的问题时,您会立即回忆起该模式。

    您指定的编程原则很好,请务必遵循。然而,他们更多地处于班级水平。在系统设计的更高层次上,模式将更有帮助。

    最重要的是 - 模式为您提供了与整个团队讨论设计理念的词汇。

    【讨论】:

    • 很好的描述:模式给你一个词汇来与整个团队讨论设计理念
    【解决方案4】:

    如果你已经编程了 4 年,我相信你已经使用了一些设计模式,尽管你可能不知道你这样做了。

    设计模式会教你解决一些人已经经历过并找到解决方案的问题。最后为我们记录下来。

    如果您想学习设计模式,可以从“Head First Design Patterns”开始,这是一本很棒的书。

    【讨论】:

      【解决方案5】:

      我不确定您真正需要的是设计模式。您可能需要对设计有更全面的了解。如果没有更多信息,就很难提供更多建议。

      设计模式(如 GoF 风格)最适合特定的代码编写风格。想象你的课程不是作为事物,而是作为人。想象一下,这些人然后通过诸如传递笔记​​、跨部门邮件或类似的方式相互交流。

      总的来说,这些人的沟通方式和消息流模式非常接近 GoF 设计模式。与此不匹配的模式通常是编写适合此模型的应用程序所需的“助手”。

      【讨论】:

        【解决方案6】:

        试试这本书,它很有趣,不仅告诉你如何实现这个模式,还告诉你什么时候做。

        http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124

        【讨论】:

          猜你喜欢
          • 2011-02-24
          • 1970-01-01
          • 2011-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-02
          • 1970-01-01
          相关资源
          最近更新 更多