Java:如果只有一个class会使用新的class,refactoring/decoupling还有用吗?

Java: Is there use to refactoring/decoupling if only one class will use the new class?

代码:

public class Name {

private String[] name;
private String first;
private String middle;
private String last;
private String suffix;


public Name (String fullName) {
    //Name is parsed in constructor 
    parse1();
    parse2();
    parse3();
    //invoking more parse methods...
}

private void parse1() {}
private void parse2() {}
private void parse3() {}
//more parse methods...

构造函数下面的那些方法有助于解析fullName。我想将这些 parse#() 方法移动到另一个 class,比如 NameHelper.class 并在那里制作所有内容 public static 但我内心的某些东西说这样重构是没有用的,因为不是其他 class 但 Name 会使用它。

我确实想重构,因为稍后,这将很难进行单元测试。但我不想牺牲轻松测试而不是糟糕的代码重构,因为我总是可以使用 PowerMockito 来测试私有代码。

总是有帮助的一件事是研究职责。名字首先是……名字。

对我来说,解析字符串以创建名称似乎是一项不一定属于 该名称的责任。它实际上更像是一个相关的 "helper" 或 "Service" 功能。

从这个意义上讲,只需创建该包保护附加 class 并将解析代码移到其中。

但郑重声明:我不会将事情设为私有,然后求助于 Powermock 锤子以对其进行测试。特别是基于 input/output 的代码;为什么首先需要模拟?

我的意思是:这听起来像是您输入了 strings,因此,您收到了一些 Name 对象。因此:您的单元测试有一些测试输入数据,实例化 NameParserService;然后检查输出是否正确。不需要任何类型的 mocking/stubbing!

如果您觉得这样可以使您的代码更好,请进行重构。我没有理由不把它们放在另一个 class 中。它也可能使它更具可读性。如果您不想访问实例变量,则无需将这些方法放在那里。您可能想让它们受到保护并将它们放在同一个包或默认(包私有)访问中。