最佳实践要求一种方法应该只对一件事负责。 我遇到了一个做三件事的方法,我不知道如何根据最佳实践对其进行分解。命名它。 另外我想知道现实生活中有多少方法真的只做一件事,因为教科书一直在提供建议?
method ( entryId ) {
if (this.checkDuplicate(entryId)) {
this.deleteDuplicate(entryId);
return true;
} else {
return false;
}
}
正如我们所看到的那种方法命名方法,正在做的不仅仅是一件事。是否有可能遵守方法应该只负责一件事规则' ?
如果是,如何将上述算法分解为它?
如果没有,我能说出一个可以做很多事情的方法吗?
答案 0 :(得分:0)
让我们这样说 - 规则(GRASP - 高内聚模式)与您的编程语言语义或语法无关。相反,它意味着您必须从功能或业务逻辑角度更加谨慎地处理您的方法/类职责。 几乎所有的设计原则都必须以非常谨慎和谨慎的方式应用,否则你将最终得到数十个和几十个间接和抽象层而没有真正的目的。
答案 1 :(得分:0)
虽然Yauheni Maltsau写的是真的,但我想加10美分。
我会说你的方法实际上只做了一件事:检查重复并删除它。所以我会保留它,除了这个名字。你应该给它一个更具描述性的名称,如removeIfDuplicate
或类似的东西。
答案 2 :(得分:0)
你不一定要以一个完美的名字和完美的凝聚力开始。 如果您有单元测试来验证代码的行为,您可以在几个阶段进行重构,并且您可能最终在重构过程中多次更改名称。这个想法是在不破坏任何东西的情况下逐步改进。
我可能首先命名方法“deleteEntryIfDuplicate”,然后我会问自己为什么该方法需要返回一个布尔值。由于我没有使用布尔值的调用代码,我只能推测,但可能有责任没有在正确的地方处理。也许不是返回一个布尔值,重复条目的所有功能都应该在一个方法中处理,该方法执行删除,记录它,并通知侦听器。这可能看似增加了责任,但管理重复条目的情况可视为一项责任。烤蛋糕是一个单一的责任,即使这意味着你需要将鸡蛋和牛奶从冰箱中取出,将面粉和糖从食品室中取出,预热烤箱等。目标是每次打电话给正确的抽象层次。
我应该补充一点,你不需要“镀金”一切。工程是一种权衡取舍。从长远来看,明确分离责任的清洁代码可以节省时间和金钱,但您可能没有足够的时间来完善所有内容。