java - Java中的重构方法: What pattern should I apply?

标签 java design-patterns refactoring tdd

我用 Java 开发了一个应用程序,我正在重构它。我刚刚意识到我有几个方法执行几乎相同的操作,而且它们的名称也相似:

RestrictedPersonServiceImpl.canViewPersonDetails

RestrictedPersonServiceImpl.isSubjectRestrictedToWorker

RestrictedPersonServiceImpl.isAnySubjectRestricted 

RestrictedPersonServiceImpl.isSubjectRestricted 

RestrictedPersonServiceImpl.isAnySubjectOfSubgroupRestrictedToWorker

我很确定它必须是一种编程模式才能适用于处理这种情况。我之前想到的解决方案是将所有这些方法合并为一个,并通过参数确定行为。

还有更好的选择吗?

谢谢大家

最佳答案

在大多数情况下,将多个方法合并为一个是一个糟糕的选择。 这里有一些原因。

  1. 代码应该简单。 if/else 或 switch/case 结构越少越好。这种代码测量称为“分支因子”
  2. 删除完整方法(如果需要)比删除特定方法的一部分更容易。
  3. 在 javadoc 中更清晰、更容易解释。此外,在大多数情况下,不需要解释任何内容,因为方法名称会自行解释。

另一种情况是,如果您的所有方法都执行可以由参数控制但没有 if/else 结构的相同操作。例如,addOne()addTwo() 等一系列方法是没有用的。在这种情况下,您应该定义方法 add(int value) 完成这项工作。

有时定义一个接受参数的私有(private)方法是有用的,但公开一系列没有参数的公共(public)方法,这些方法用正确的参数调用这个私有(private)方法。当这些方法之间的错误处理存在一些差异,或者如果有多个参数且并非所有组合都合法时,这通常很有用。

关于java - Java中的重构方法: What pattern should I apply?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29924799/

相关文章:

bash - 仅文件通配和匹配数字

PHP重构工具

java - 大量 if else 重构

java - 重构严格的代码以消除检查instanceOf的if-else语句

java - 使用 gradle 复制任务从所有依赖项复制 META-INF

java - Jenkins 中的 Selenium 测试失败(等待找到的元素存在几秒后超时),但在本地它工作正常

javascript - 如何在javascript中实现访问者模式?

java - 装饰器模式是否对具有许多字段的 "bulky"类有不利影响?

java - 如何在java中的arraylist中添加异常

java - 有什么方法可以检查 Hadoop 文件是否已经打开进行写入?