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 中。它也可能使它更具可读性。如果您不想访问实例变量,则无需将这些方法放在那里。您可能想让它们受到保护并将它们放在同一个包或默认(包私有)访问中。
代码:
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 中。它也可能使它更具可读性。如果您不想访问实例变量,则无需将这些方法放在那里。您可能想让它们受到保护并将它们放在同一个包或默认(包私有)访问中。