Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如何应用设计模式?_Design Patterns - Fatal编程技术网

Design patterns 如何应用设计模式?

Design patterns 如何应用设计模式?,design-patterns,Design Patterns,从书呆子的角度来看,您可能会说x设计模式适用于y场景,但我想在这里更深入一点。以下是我的疑问: 您何时第一次决定使用设计模式?你们所有人在编码之前都决定了设计模式吗 在完成编码(小重构)之后,您是否应用了任何DPs?您是否在维护代码时应用DP 在设计过程中主要应用的设计模式是什么 调整/重构代码时应用的DPs是什么 代码中是否有任何提示(技术而非功能性的东西)建议您应用DP(比如太多的ifs、双分派、多线程)?如果是的话,你能说出DPs和他们的要点吗 你是否使用过任何能让你对自己编写的代码感觉良

从书呆子的角度来看,您可能会说x设计模式适用于y场景,但我想在这里更深入一点。以下是我的疑问:

  • 您何时第一次决定使用设计模式?你们所有人在编码之前都决定了设计模式吗
  • 在完成编码(小重构)之后,您是否应用了任何DPs?您是否在维护代码时应用DP
  • 在设计过程中主要应用的设计模式是什么
  • 调整/重构代码时应用的DPs是什么
  • 代码中是否有任何提示(技术而非功能性的东西)建议您应用DP(比如太多的ifs、双分派、多线程)?如果是的话,你能说出DPs和他们的要点吗
  • 你是否使用过任何能让你对自己编写的代码感觉良好的微DPs(即使其他人因此讨厌你:p)
  • 编辑:
    我想补充一点,我通过“头先设计模式”阅读DPs,尽管这是理解该模式的最佳书籍之一。我认为我无法将比萨饼的例子转换为现实世界的场景


    我认为这是关于DP的最有影响力的书籍之一,但我们仍然可以有一本书列举各种流行的商业场景,这些场景需要一种特定的模式。我认为,这种知识在很大程度上仍然是隐含的。这样一本书将是一个非常好的快速参考书,你不认为吗:)

    我认为有一种趋势,至少对于那些新学习设计模式的人来说,过度应用模式;当你有一把锤子时,一切看起来都像钉子。一个更好的方法是考虑API的替代方案以及它们各自的优点和权衡,然后选择合适的。设计模式更多的是一种术语帮助,它允许开发人员有效地传递他们正在做的事情,而不是提供应该如何编写代码的指南。也就是说,有些事情会在代码中重复出现,告诉同事您使用了工厂比解释您传递的某个对象创建了其他对象更容易。。。。但仅仅因为工厂的概念存在并不意味着你应该把你看到的一切都变成工厂。有意义吗?

    在我看来,没有任何规则或常见情况。设计模式是在适当的时候使用的,有时是在设计时,有时是在编码时,有时是在重构时


    大多数时候,我不会一对一地“应用设计模式”。他们需要适应。设计模式就像一个经验目录。您只需了解一些常见或典型的模式,并将它们更改为您需要的解决方案。(注意:它们是模式,而不是解决方案。)

    根据我的经验,模式何时应用取决于前期设计的方法和水平。通常在敏捷过程中,我会看到随着代码意图的发展,模式很快出现,然后进行相应的重构

    冒着声明显而易见的单元测试的风险,可以减轻很多风险,但越早进行就越好。我从未做过支持实现新模式的主要代码重构,因为所涉及的工作很少显示出显著的好处。除非该项目即将进入一个新的发展阶段


    包含在一个或两个方法中的小重构在项目的整个生命周期中是相当常见的,但这些重构都是以没有“代码完整”这类东西为幌子的:

    设计模式描述了在给定上下文中针对反复出现的问题的通用可重用解决方案。当您发现一个模式可以解决的身份设计问题时,您应用了一个模式。这可能发生在初始设计、编码、维护等过程中。IMO称,没有绝对配方

    另见

    关于如何以及何时(不)使用设计模式的两本好书是:

    • (由GoF的John Vlissides撰写)
    • (乔什·克里耶夫斯基)
    1和2

    我认为这是错误的做法,她只是盲目地决定一个最喜欢的模式,或者先编写代码,然后重构到一个已知的模式。当您看到一个问题时,您必须认识到与使用已知模式可能解决的其他问题的相似性

    模式不是成功的食谱;这是经验法则。阅读一本关于模式的书中的案例可以帮助你认识问题,避免一两次失误

    3:什么样的模式占主导地位在很大程度上取决于领域。在执行与其他系统进行大量通信的应用程序时,状态模式、代理和外观非常常见。GUI应用程序有不同的需求等

    在我的行业(银行业):我看到以下许多GOF模式:工厂方法、单例、适配器和外观。行为模式或多或少被10年前流行的JavaEE14层反模式所扼杀

    4:在重构时——如果一个模式对你有帮助,就使用它。重构时没有一类模式更适合

    5:我认为一个特定模式的主要指标更多地与问题相关,它与一个特定模式解决的其他问题相似。是的,如果代码有异味,这表明它可能需要重写,应该再次分析问题。虽然有些问题是复杂的,不能简化,但大多数问题都可以简化,而且模式可能有助于组织问题

    不过。由于观察到复杂的问题需要复杂的解决方案,胖人倾向于编写复杂的代码;那有什么用呢。状态模式(我喜欢)如果被过度使用,会使事情复杂化到难以想象的程度

    他说:我的同事们似乎都喜欢我,所以我可能一点也不过分