YAGNI原则应用于设计模式有什么意义?

时间:2018-12-03 14:10:32

标签: design-patterns yagni

我最近阅读了“ Head First设计模式”。这本书写得很好,值得一读。它通常在开始每一章时首先介绍一个问题和对该问题非常“幼稚”的解决方案。在接下来的页面中,提出了更多的要求和约束,例如添加更多功能或更新行为。本书再次提供了“天真”的更新方法。在某种程度上,当“天真的”方法弄乱了解决方案(事情开始出错)时,这本书将读者带入了一种全新的方法-目标设计模式。

在其他地方,我学到了一个缩写为“ YAGNI” You Aren't Gonna Need It的原则,该原则指出:“总是在实际需要时执行事情,从不只是在预见到需要时就执行。”

我现在想知道,“ Head First设计模式”是否以“ YAGNI”原理为废话来解释事情?既然在一定程度上,给定了一系列要求,我们应该寻求最简单,最干净的解决方案,对吗?

2 个答案:

答案 0 :(得分:1)

YAGNI原则并没有说明简单的解决方案还是干净的解决方案。 KISS原则描述了这些因素。 YAGNI原则的重点是避免开发未使用的功能。使用此原理的主要目的是节省开发时间。

例如,让我们假设您应该将应用程序与外部API集成。您开发API的客户端组件以实现此目标。当然,您可以使客户端组件与外部API的所有功能一起使用。这种方式使人们能够制造出伟大的通用组件,该组件将来可以在许多不同的应用中使用。但可能您的应用程序当前未使用每种API功能。这意味着这种方式有几个缺点:

  • 您将获得可能永远不会使用的功能
  • 您将花费开发时间来开发目前无法带来业务价值的功能。
  • 您无法在实际使用中测试未使用的功能。

在这种情况下,仅使用功能的开发要比完整功能的开发更为合理。 YAGNI原则告诉了我们。

答案 1 :(得分:1)

YAGNI + Design Patterns == Refactoring

关于设计模式,有一个观点主张提倡重构模式而不是设计模式。书Refactoring to Patterns 就是这种观点的例证。马丁·福勒(Martin Fowler)表示赞同,

  

...大多数流行的“四人组合”模式...不需要预先设计,而是随着系统的发展而发展。

这也是Head First设计模式所采用的方法,并且与YAGNI完全一致。不要做大的前期设计来决定您可能需要模式的地方。相反,随着系统的发展重构为模式。让模式随着时间的流逝而出现。

相关:What should come first -- the design pattern or the code?