如何确定设计模式是否正确实施?


13

我可以成功扩展所有未使用记录的设计模式的旧应用程序。我不知道是什么模式。在很大程度上,我只觉得需要使用简单的OOP概念。

设计模式的概念很复杂,很难理解。在实施时,如何确定实施是否正确以及应用程序是否具有真正的松散耦合?


49
有一个严重的什么设计模式是误解。它们不是魔术粉尘,您可以将其撒在应用程序上以使其更好。它们主要是能够讨论解决问题的常用方法的常用词汇。我敢肯定,有很多人整天都在“正确地实施模式”,却从未听说过“模式”一词。
Joachim Sauer

2
@JoachimSauer您刚才说的是技术大学应该教的那种东西...由于我目前是学生,所以这是目前最让我生气的事情。
Radu Murzea

1
@JoachimSauer实际上,由于相同模式的实现技术多种多样,所以会出现这种误解。以MVC和MVP为例,具有与项目相同模式的多种变体。
RPK

@RPK +1,这是事实,即存在多种MVX模式(MVC,MVP,MVA,MVVM等),这应明确表明存在许多同样可行的方法。
MattDavey

Answers:


3

为了使答案简洁明了,我想说的是,如果以下特征在您的代码中可见,那么即使您没有为此做出任何努力(这不是问题),您也可以确信这些模式已经就位。

所需特性:

  1. 您的代码库可以在单元级别进行测试
  2. 无论何时实现任何更改请求,都只对域中相互关联的相关类进行更改。
  3. 您的代码库没有表现出软件熵

如果您仍然想使用真实的模式名称来标识并标记代码,我建议您执行以下操作以使代码滚动。

  1. 对代码库进行反向工程以生成一些UML代字。
  2. 直观地比较与任意的图表准备参考模式的参考材料。

这应该给你一个不错的主意。


您能否详细说明第三个?
Niing

19

您提到了设计模式和耦合。这些是单独的概念,因此我将分别处理它们。唯一真正的联系是设计模式倾向于促进松散耦合(因为这是良好设计的主要方面)。

设计模式

设计模式的概念实际上非常简单:它们只是一组如何处理各种常见问题的模板。它们受欢迎的主要原因有两个:

  1. 它们已被“证明”:它们已经被使用了很多次,并且它们的优点/缺点是众所周知的,尤其是任何可能引起大问题的细微问题都是已知的。
  2. 它们提供了一组通用的术语,因此使交流更加容易。如果有人说“类X在观察者模式中扮演观察者的角色”,那么熟悉该模式的开发人员可以立即掌握发生的情况。

您如何知道自己已正确实施?这是一个棘手的问题。对于大多数模式而言,它很简单-您已经摸索了,或者没有。有些模式的定义不如其他模式明确-例如model-view-controller。这样的模式最好用作一般准则。实现方式的细节并不比理解该模式存在的原因以及它要实现的目的重要。

设计模式不是“唯一的方式”。通常,您要么需要根据自己的特定目的对它们进行调整,要么有时就不会出现任何符合要求的模式。强迫不适合的设计模式是一个坏主意;当您真正想要的是螺丝起子时,就像使用一把非常好的锤子。

耦合

这是计算机科学中一个非常重要的想法。由于大多数软件项目的需求会随时间变化(有时会有很大变化),因此设计应对变化的能力非常重要。耦合基本上是“将这个组件换成另一个组件有多难?”的量度。“组件”可以是方法,类,包,库等。

Wikipedia文章中列出了各种类型的耦合。


2

答案实际上是您希望从一开始就编写设计模式的目的。您为什么要灵活性?

那就是改变;需求变化。尝试更改需求中反映代码更改的内容,并了解这样做的难易程度。


-1

使用设计模式是一种预防措施。稍后扩展应用程序时,可以使用设计模式来简化工作。当然,要以后减轻工作负担,您现在必须做更多的工作。因此,真正的问题是,您将来可以期待多少变化,这是什么变化。如果您不需要可伸缩性和灵活性,则可以取消设计模式。

设计模式本身就是面向对象设计原则的实现。只要遵循这些原则,您的应用程序就会变得灵活和可扩展。即使您没有真正的实际设计模式。正如Joachim Sauer上面评论的那样,它们是常见问题的通用解决方案。


2
IMO使用设计模式与可伸缩性无关。识别代码中的常见模式只是一个词汇,因此我们可以讨论它们。通常,扩展应用程序可能意味着违背良好的设计而倾向于性能。
阿德里安·施耐德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.