编写完成一件事并做得很好的程序

我可以通过封装,依赖注入,最少知识原则,你不需要它来掌握“做一件事”的部分;但我怎么理解第二部分“做得好”? 给出的一个例子是完整性的概念,在同一篇YAGNI文章中给出:   例如,在允许添加项目,删除项目或修改项目的特征中,可以使用完整性来推荐“重命名项目”。 但是,我发现这样的推理很容易被滥用到特征蠕变中,从而违反了“做一件事”的部分。 因此,看到相当一个特征属于“做得好”类别(因此,将其包含在函数/类/程序中)或其他“做一件事”类别(因此,排除它)的试金石是什么? ? 第一部分,“做一件事”,最好通过UNIX的
ls
命令作为反例,因为它包含了过多的标志来格式化它的输出,这应该完全委托给另一个外部程序。但我没有一个很好的例子来看第二部分“做得好”。 什么是一个很好的例子,删除任何进一步的功能将使它不“做得好”?     
已邀请:
我认为“做得好”与功能的实现质量相关,而不是设置功能的完整性(在你的例子中有重命名,以及创建和删除)。 做得好从多方面体现出来,一些思维方式: 响应“特殊”输入的行为。例如,计算一些整数的平均值:
int mean(int[] values) { ... }
如果数组中没有元素,这会怎么做?如果项目总数超过MAX_INT? 性能特点。随着数据量的增加,是否对行为给予了足够的重视? 依赖性失败。如果我们的实现依赖于其他模块或基础架构,当这些失败时会发生什示例:文件系统已满,数据库已关闭? 关于特征蠕变本身,我认为你在这里识别紧张是正确的。您可以考虑的一件事是:您不需要实现每个功能,只要很明显可以轻松添加功能而无需完全重写。     
这个建议的目的是让你更喜欢质量而不是数量。 一件事的概念是主观的,取决于粒度。您是否会说电子表格应用程序如果还可以打印,或者是那一件事的一部分,它会做多个事情? 关键是你应该确保在争夺添加新功能之前完成任何功能和应用程序本身,并且会让客户高兴。     

bab

我认为你的问题指出了特征蠕变的根本有机性,并且在理解这种性质时,你将有权思考更大的问题。 把它想象成一个花园:如果你种植一种东西并种植它,比如说,一种菊花,你就不能简单地种下种子。事实上,你需要确保土壤得到良好的保护,该区域得到充分保护,季节是正确的,等等。 随着你的菊花(你的一件事)的增长,其他有竞争力的植物也会增长 - 有些需要被淘汰,有些则可能实际上与原始的有关。事实上,在某些情况下,这些其他生物可能证明对你的一件事的生存至关重要。 与YAGN的那些特征一样,需要一点警惕来确定哪些杂草代表特征蠕变,哪些代表重要和补充功能。 无论如何,做得好只意味着你的菊花是丰盛,健康,准时的。 :-)     
我会说一个无法添加附件的电子邮件程序就是一个很好的例子。     
这可能听起来像一个奇怪的例子,但我会说Dropbox是一个很好的,尽管很复杂的例子。 它设法击败了大量类似的竞争应用程序,通过致力于简化和缺乏功能蠕变,如你所提到的,将违反“做一件事”的原则。 ap允许您将文档存储在您可以在任何地方访问的文件夹中,这是关于它的限制。他们深入研究了核心问题,并以90%以上的情况完美地解决了问题。 很难对它施加严格的规则,但我认为迎合90%的大多数用例并忽略“边缘要求”是坚持这一规则的最佳方式。 我估计90%以上的ls使用的是没有参数或者最流行的两三个。 “做得好”的原则应该关注大多数用户需要的东西,而不是为高级用户或边缘情况提供服务,因为它有很多选择。 这就是Dropbox成功的原因,以及为什么它作为良好应用程序设计的一个例子得到了很好的认同。     

要回复问题请先登录注册