1
25
为某事而设计 …完全不同于
为某些东西设计意味着您正在为将来的扩展设计应用程序,以防需要编写代码(这很好……这意味着您正在使软件可扩展且易于维护)。 设计某样东西意味着你现在正在写整件作品……不管你是否认为有人真的会使用它。这不一定是一件坏事,但可能是对时间的巨大浪费。
|
2
9
这与完美主义有关。让我们完善它,让我们为所有可能的未来场景做好准备。 在决定需要它的机会时,实事求是和冷静是有帮助的:做出选择,然后回答“是”或“否”。也许是否定的。
|
3
7
只要使用TDD!!! 很少你会发现自己在为一个你不需要的特性编写测试。。。 |
4
7
因为雅格尼是一个原则,而不是万灵药
从这个意义上说,雅格尼是在那里的 避免
平衡相互竞争的需求是困难的。但这就是为什么——正如麦康奈尔尖锐地指出的那样——软件开发是工程。
这是一份简单的合同。奥托,
不 合同,是对实施的描述。
设计没有坏处
毕竟,他们是年长的 我不了解他们——他们的倾向可能是由于老派的灌输和对变化的恐惧。或者他们是大四的学生,因为他们知道自己的工作——他们已经知道你现在比以后更愿意做什么,以及哪些部分 可以 |
5
6
一般来说,如果您发现自己在想,“它可能需要[xyz]”,那么这应该在您的代码中起到明确的作用。即使您不支持xyz编码,您也应该以这样一种方式编码,即重构以添加xyz支持是尽可能实际的。然而,有时这可能意味着使某些东西比严格需要的更通用。知道在这条道路上应该停在哪里可能是只有特定领域的信息加上经验才能告诉你的事情。 |
6
4
用非技术性的术语写出需求有时也会有所帮助。这让我知道我必须在最后展示什么,而不必担心更精细的细节,例如,系统的用户不太可能阅读我的源代码并嘲笑我使用我们使用的任何命名约定。他们关心它的工作,做他们需要和想要做的事情。 另一个问题是,“他们真的这样要求吗?”并尽量减少对功能的假设。如果它不在列表中,那么就把它删掉,尽管问问他们是否想要它。 |
7
3
您无法确定其他开发人员将如何使用您的工具,有时,灵活地进行设计更有意义,这样您的产品就可以在更广泛的场景中使用。向前兼容性也是一个巨大的考虑因素。 YAGNI仍然适用,但“it”往往处于元特性级别,而不是特性级别。 |
8
2
雅格尼其实更像是一个问题。作为高级开发人员,我们一直在违反YAGNI。这实际上是一个“需要”的问题。你需要它吗?定义“需要”。我见过用雅格尼教条形成的可怕的泥球。 并不是说我认为雅格尼没用。。。总是值得问“我需要这个吗?”。 |
9
2
答案介于他的方法和我的方法之间。我们怎样才能达成折衷?在试图做出一个“完美”的设计之间,如果将来不得不改变某些东西,人们会欣赏或讨厌它。 至少在设计模块时,IMHO的答案可以归结为面向对象编程的基本原则,比如定义清晰的接口。 因为你认为明天可能会被其他人使用,所以你计划放置的任何东西都必须经过数小时的辩论!你应该有充分的理由为那些目前连名字都没有的人添加“免费赠品”! 对于这个问题,我仍然需要一个明确的答案。也许是这里的某位架构师设计了大型应用程序,并曾100次面对这种情况:) |
10
1
以一种使将来的特性更容易实现的方式设计应用程序是很好的,但是在需要之前不要真正实现这些特性。如何进行这项工作完全取决于您正在进行的项目。 |
11
1
|
12
1
我们公司有一个经验法则:当我们讨论设计一个新功能时,首先要回答的问题是“谁真的想要这个?”如果客户是幕后主使,那么我们会试图了解他真正想要什么,以及是否有其他方法来解决他的问题(而不是添加一个新功能)。如果团队成员要求使用此新功能,他应该有充分的理由。性能问题和市场营销问题是其中之一,在我们向代码库添加一些新特性之前,我们再次尝试充分理解请求并讨论所有可能的替代方案。 |
13
1
|
14
0
|
15
0
雅格尼通常是事后诸葛亮。只要确保你足够敏捷,在“雅格尼”变得明显时删除“我”。 |