16

随着我越来越多地将敏捷思维吸收到我的工作方式中,yagni(“你不会需要它”)似乎变得越来越重要。在我看来,这似乎是过滤掉被误导的优先事项并决定下一步不做什么的最有效规则之一。

然而,yagni 似乎是一个在 SO 中几乎没有被提及的概念。我进行了强制性搜索,它只出现在一个问题标题中——然后是次要角色。

为什么是这样?我是否高估了它的重要性?

免责声明。为了抢占响应,我相信我会反对,让我强调一下 yagni 是quick-and-dirty 的对立面。它鼓励您将宝贵的时间和精力集中在获得您确实需要的零件上。

以下是人们可能会提出的一些热门问题。

我的单元测试是根据用户要求还是框架结构选择的?

我是否安装(并测试和维护)单元测试,因为它们脱离了框架?

有多少由我的框架生成的代码我从未看过(但总有一天可能会咬我,即使是 yagni)?

我花了多少时间在我的工具上而不是用户的问题上?

结对编程时,观察者的角色价值往往在于“yagni”。

你使用 CRUD 工具吗?它是否允许(不,鼓励)您将其用作 _RU_ 工具或 C__D 工具,或者当您只需要一两个代码时,您是否正在创建四段代码(加上四个单元测试)?

4

6 回答 6

12

TDD 在某种程度上包含了 YAGNI。如果您正确地进行 TDD,即只编写那些产生所需功能的测试,然后开发最简单的代码以通过测试,那么您默认遵循 YAGNI 原则。根据我的经验,只有当我跳出 TDD 框框并开始在测试之前编写代码、测试我并不真正需要的东西或代码不是通过测试的最简单方法时,我才违反了 YAGNI .

以我的经验,后者是我在做 TDD 时最常见的错误——我倾向于向前跳并开始编写代码以通过下一个测试。这通常会导致我基于我的代码而不是需要测试的要求有一个先入为主的想法,从而损害剩余的测试。

YMMV。

于 2008-12-15T22:32:37.697 回答
4

Yagni 和 KISS(保持简单,愚蠢)本质上是相同的原则。不幸的是,我看到 KISS 被提到的频率和我看到“yagni”一样频繁。

在我的荒野中,项目延迟和失败的最常见原因是不必要的组件执行不力,所以我同意你的基本观点。

于 2008-12-15T22:46:04.970 回答
3

改变的自由推动了 YAGNI。在瀑布项目中,口头禅是控制范围。通过与客户签订合同来控制范围。因此,客户将他们能想到的所有东西都塞进范围文档中,因为他们知道一旦签订合同就很难改变范围。结果,您最终得到的应用程序具有一长串功能,而不是一组有价值的功能。

通过敏捷项目,产品负责人构建了一个优先的产品待办事项列表。开发团队根据优先级(即价值)构建功能。结果,最重要的东西首先被构建。您最终会得到一个具有用户重视的功能的应用程序。不重要的事情会从列表中消失或没有完成。那是雅格尼。

While YAGNI is not a practice, it is a result of the prioritized backlog list. The business partner values the flexibility afforded the business given that they can change and reprioritized the product backlog from iteration to iteration. It is enough to explain that YAGNI is the benefit gained when we readily accept change, even late in the process.

于 2009-05-12T19:44:50.127 回答
1

我发现的问题是,人们甚至倾向于使用 YAGNI 下的 DI 容器(除非你的代码库中已经有它)来编写工厂。我同意那里的JB King。对于我与 YAGNI 合作过的许多人来说,似乎是偷工减料/编写草率代码的许可。

例如,我正在编写一个用于抽象多个模型/制造商的 PINPad 的 PinPad API。我发现除非我有整体结构,否则我什至无法编写单元测试。可能我不是一个非常老练的 TDD 实践者。我敢肯定我所做的是否是 YAGNI 会有不同的意见。

于 2008-12-17T23:16:58.057 回答
0

我看过很多关于 SO 引用过早优化的帖子,这是 yagni 的一种形式,或者至少是 ydniy(你还不需要它)。

于 2008-12-15T22:33:48.037 回答
-1

我不认为 YAGNI 是快速和肮脏的对立面,真的。它只是做需要做的事情,而不是像某人编写的软件那样计划必须持续 50 年。它可能很少出现,因为至少在我看来,围绕它的问题并不多。类似于“不要重复自己”和“保持简单、愚蠢”的规则,这些规则变得很普遍,但不一定以 101 种方式进行剖析和分析。有些事情很简单,通常在做一些练习后很快就会得到。有些事情是在幕后发展起来的,如果你转身看你可能会注意到它们可能是另一种陈述事情的方式。

于 2008-12-17T22:39:37.603 回答