如何将这样一个简单的方法分解并命名?

时间:2015-07-10 22:42:01

标签: java methods coupling cohesion

最佳实践要求一种方法应该只对一件事负责。 我遇到了一个做三件事的方法,我不知道如何根据最佳实践对其进行分解。命名它。 另外我想知道现实生活中有多少方法真的只做一件事,因为教科书一直在提供建议?

method ( entryId ) {
   if (this.checkDuplicate(entryId)) {
       this.deleteDuplicate(entryId);
       return true;
   } else {
       return false;
   } 
}

正如我们所看到的那种方法命名方法,正在做的不仅仅是一件事。是否有可能遵守方法应该只负责一件事规则' ?

如果是,如何将上述算法分解为它?

如果没有,我能说出一个可以做很多事情的方法吗?

3 个答案:

答案 0 :(得分:0)

让我们这样说 - 规则(GRASP - 高内聚模式)与您的编程语言语义或语法无关。相反,它意味着您必须从功能或业务逻辑角度更加谨慎地处理您的方法/类职责。 几乎所有的设计原则都必须以非常谨慎和谨慎的方式应用,否则你将最终得到数十个和几十个间接和抽象层而没有真正的目的。

答案 1 :(得分:0)

虽然Yauheni Maltsau写的是真的,但我想加10美分。

我会说你的方法实际上只做了一件事:检查重复并删除它。所以我会保留它,除了这个名字。你应该给它一个更具描述性的名称,如removeIfDuplicate或类似的东西。

答案 2 :(得分:0)

你不一定要以一个完美的名字和完美的凝聚力开始。 如果您有单元测试来验证代码的行为,您可以在几个阶段进行重构,并且您可能最终在重构过程中多次更改名称。这个想法是在不破坏任何东西的情况下逐步改进。

我可能首先命名方法“deleteEntryIfDuplicate”,然后我会问自己为什么该方法需要返回一个布尔值。由于我没有使用布尔值的调用代码,我只能推测,但可能有责任没有在正确的地方处理。也许不是返回一个布尔值,重复条目的所有功能都应该在一个方法中处理,该方法执行删除,记录它,并通知侦听器。这可能看似增加了责任,但管理重复条目的情况可视为一项责任。烤蛋糕是一个单一的责任,即使这意味着你需要将鸡蛋和牛奶从冰箱中取出,将面粉和糖从食品室中取出,预热烤箱等。目标是每次打电话给正确的抽象层次。

我应该补充一点,你不需要“镀金”一切。工程是一种权衡取舍。从长远来看,明确分离责任的清洁代码可以节省时间和金钱,但您可能没有足够的时间来完善所有内容。