【问题标题】:Reconciling the paradox of YAGNI vs foresight调和 YAGNI 与远见的悖论
【发布时间】:2015-06-19 13:40:41
【问题描述】:

我参加了一些课程并了解了 YAGNI 的用途。但是,这个原则作为一个整体从来没有让我满意。它引入了一个逻辑悖论。

假设您正在设计一个打算向前扩展的框架。 YAGNI(可能还有 TDD)会鼓励你关注现在。让它适用于您可预见的硬件。毕竟,对未来的要求是模糊的,而且是在未来。

但是,这从本质上限制了框架的可行性。在这个假设中,你有先见之明,知道未来会怎样。做一些原型设计和提前工作可能值得你花时间,因为知道它可以很好地帮助你。毕竟,框架的本质是促进跨环境的某些功能 - 那么您如何设计框架严格遵守 YAGNI 原则?

我不确定我是否要求提供关于“如何使用 YAGNI”的具体内容——我知道它可能比这更富有哲理。我可能只是在询问业内经验丰富的开发人员,YAGNI、对立原则和最佳实践之间的界限在哪里。 YAGNI 是否被强制执行?它甚至被视为?或者这只是我们的学校教给我们的东西,因为它在我们的书中?

谢谢。

【问题讨论】:

  • 有远见 - 为您在合理的时间范围内需要的东西进行设计,还有 YAGNI - 你有一天可能需要的东西, 也许。没有界限,但是尝试为您可能遇到的每个问题设计一个无限可扩展的通用解决方案会导致成堆的代码永远无法交付。所以,是的,请提前考虑,但用户手中的可用软件对他们来说比未来某个日期的优雅解决方案更有价值。软件设计艺术的一部分是在交付和 YAGNI 之间找到平衡。
  • 这个问题不适合SO,你可以试试programmers.stackexchange.com
  • @HenriqueBarcelos 在推荐其他网站时,指出cross-posting is frowned upon 通常会有所帮助
  • @gnat 因为我不知道 SE 中有任何迁移工具,这个问题可能会被关闭,OP 还有什么其他选择?
  • @HenriqueBarcelos 原站自删

标签: design-patterns methodology yagni


【解决方案1】:

YAGNI 是大型应用程序的实际开发和维护中的一项重要原则,原因有很多。以下是最引人注目的:

技术复杂性 在处理工业规模的代码库时,经验丰富的开发人员非常不愿意接受系统中的技术复杂性。您不应该在需要之前就开始支付额外技术复杂性的隐含开销。

需求流失 您可能认为您对系统的未来需求有一个清晰的概念,但您很可能错了。统计数据表明,产品负责人描述为项目“必须具备”的所有功能中有 35% 从未实现过。试图预测未来的需求并做一些新的技术工作会导致浪费精力。

QA 反馈循环 任何时候你在一个非平凡的技术系统上进行任何开发,都会有错误。这是不可避免的。根据一些研究,在创建之日和一年后发现错误会使开发成本相差 100 倍。现在“以防我们以后需要”键入无法通过与 UI 交互来执行的代码是开发人员缺乏经验的标志。

总而言之,最好的代码基本上始终坚持 YAGNI 原则,最好的敏捷团队也以此为目标。如果您有远见,您可能会认为您正在使您的代码更易于使用、更灵活等,但事实并非如此。当代码很简单时,它最容易使用,所以请保持这种方式。

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多