将公共方法转换为私有方法

科里:

我最近重构了一些代码,该代码将仅与另一个公共方法结合使用的一个公共方法转换为一个调用。

public class service() {
  public String getAuthenticatedUserName() {
    return SecurityContext.getName();
  }

  public getIdentityUserIdByUsername(String username) {
    return db.getUser(username).getId();
  }
}

在的其他一些类中也被使用了service.getIdentityUserIdByUsername(service.getUsername()),这似乎很多余。结合了两个调用,创建了一个新方法。

public getIdentityUserId() {
  return getIdentityUserIdByUsername(getUsername());
}

getIdentityUserIdByUsername()仍在使用的其他类,而不需要getUsername()但是,该getUserName()方法不再在其他类中使用。

我的示例比实现要简单得多,该方法的测试覆盖范围有点尴尬(在没有Powermock的情况下模拟静态类,在Google上进行了一些搜索等等)。将来可能会需要该getUsername()方法,并且该方法不会更改。

在代码审查中建议,由于该getUsername()方法现在未在其他任何地方调用,因此现在应为私有方法。这将要求删除/注释掉该方法的显式测试,这似乎需要反复努力重写或丑陋地留下注释掉的代码。

最佳方法是将方法更改为私有方法还是将其公开,因为它具有明确的覆盖范围,将来您可能会需要它?

斯蒂芬·C:

最佳方法是将方法更改为私有方法还是将其公开,因为它具有明确的覆盖范围,将来您可能会需要它?

IMO,您问的是错误的问题。所谓的“最佳实践”没有出现。(请阅读下面的参考!)

真正的问题是/最有可能选择哪种选择。这确实是您要决定的。不是我们。

替代方法是:

  1. 您可以删除专用方法的测试用例。
  2. 您可以注释掉测试用例。
  3. 您可以修复测试用例,使其与方法的私有版本一起运行。
  4. 您可以将方法保留为public

为了做出合理的决定,您需要在项目的背景下考虑每种替代方案的技术和非技术利弊但是,不要太担心做出错误的决定。总体而言,错误选择的可能性极小。

最后,我建议避免仅仅因为它们是“代码异味”而放弃它们。该短语与“最佳实践”具有相同的问题。它会导致您基于概论...和当前关于好的或坏的“做法”的观点(甚至是时尚)而忽略有效的选项。


因为您要别人的意见(“最佳实践”就是意见!),所以我认为所有替代方案都是有效的。但是我的投票是将方法保留为public这是最少的工作量,并且API中未使用的方法危害很小。正如您所说,可以合理地预期将来会使用该方法。

您无需与代码审阅者达成一致。(但这不值得让敌人成为敌人...)


参考文献:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章