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_Yagni - Fatal编程技术网

Design patterns 雅格尼原则应用于设计模式的要点是什么?

Design patterns 雅格尼原则应用于设计模式的要点是什么?,design-patterns,yagni,Design Patterns,Yagni,我最近读过“头先设计模式”。这本书写得很好,值得一读。它通常在每章开始时首先介绍一个问题和一个非常“幼稚”的问题解决方案。在接下来的页面中,将提出更多的要求和约束,例如添加更多功能或更新行为。这本书再次提供了更新的“天真”方法。在某种程度上,当“幼稚”的方法把解决方案搞得一团糟(事情开始出错)时,这本书会驱使读者采用一种全新的方法——目标设计模式 在其他地方,我学到了一个缩写为“YAGNI”的原则,即“始终在实际需要时实施,而不是在预见到需要时实施。” 我现在想知道,“头先设计模式”是否以非理性

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

在其他地方,我学到了一个缩写为“YAGNI”的原则,即“始终在实际需要时实施,而不是在预见到需要时实施。”


我现在想知道,“头先设计模式”是否以非理性的方式解释了“雅格尼”原则?因为,在某种程度上,给定一组要求,我们应该寻求问题的最简单和最干净的解决方案,对吗?

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

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

  • 您将获得可能永远不会使用的功能
  • 您将把开发时间花在当前无法提供业务价值的功能上
  • 您无法在实际使用中测试未使用的功能

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

YAGNI+设计模式==重构

对于设计模式,有一种观点主张重构为模式,而不是设计为模式。这本书举例说明了这种观点。马丁·福勒在赞同这本书时表示

…大多数流行的四人帮模式。。。不需要预先设计,而是随着系统的发展而发展

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


相关:

我还没有读过这本书,但根据你的解释,它似乎遵循了雅格尼的说法:它实现了一个问题的最简单解决方案,而不是试图解决一个还不存在的问题,直到问题最终存在,代码变得一团糟。