我可以通过封装掌握“做一件事”部分,依赖注入 http://en.wikipedia.org/wiki/Dependency_injection, 最少知识原则 http://en.wikipedia.org/wiki/Law_of_Demeter, and 你不会需要它 http://en.wikipedia.org/wiki/You_Ain%27t_Gonna_Need_It;但我如何理解第二部分“做好”?
给出的一个例子是这样的概念完整性,在相同的条件下给出亚格尼文章 http://en.wikipedia.org/wiki/You_Ain%27t_Gonna_Need_It:
例如,在允许添加项目、删除项目或修改项目的特征中,完整性还可以用于推荐“重命名项目”。
然而,我发现这样的推理很容易被滥用到功能蔓延,从而违反“做一件事”部分。
因此,什么是查看功能的试金石,而不是属于“做得好”类别(因此,将其包含到函数/类/程序中)或另一个“做一件事”类别(因此,排除它) ?
第一部分“做一件事”最好通过 UNIX 来理解ls
命令作为反例,因为它包含过多的用于格式化其输出的标志,这些标志应该完全委托给另一个外部程序。但我没有一个很好的例子来证明第二部分“做得好”。
有什么好的例子可以说明删除任何进一步的功能将使其无法“做好”?
我认为“做得好”与功能的实现质量一样重要,而不是一组功能的完整性(在您的示例中具有重命名,以及创建和删除)。
做得好体现在很多方面,一些思维方式:
响应“特殊”输入的行为。例如,计算一些整数的平均值:
int mean(int[] values) { ... }
如果数组有零个元素,这会做什么?如果项目总数超过 MAX_INT?
性能特点。随着数据量的增加,是否对行为给予了足够的关注?
依赖失败。如果我们的实现依赖于其他模块或基础设施,那么当这些模块或基础设施失败时会发生什么。示例:文件系统已满,数据库已关闭?
关于功能蔓延本身,我认为您在这里确定紧张局势是正确的。您可能会考虑一件事:您不需要实现每个功能,因为很明显可以轻松添加功能而无需完全重写。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)