[英]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#()
方法移到另一个类,说NameHelper.class
并使那里的所有内容都是public static
但是我里面的东西说,这样重构是没有用的,因为不是其他类,而是Name
将使用它。
我确实想重构,因为以后很难对它进行单元测试。 但是我不想牺牲测试的便捷性而不是糟糕的代码重构,因为我总是可以使用PowerMockito
来测试私有代码。
总是有帮助的一件事是调查责任 。 名称首先是...名称。
解析字符串创建一个名称给我看起来像不一定属于成名称责任。 实际上,它实际上是一个关联的“帮助程序”或“服务”功能。
从这个意义上讲,只需创建该包保护的其他类,然后将解析代码移入其中即可。
但请注意:我不会将事情变得私密,然后转向Powermock锤进行测试。 特别是真正基于输入/输出的代码; 为什么首先需要嘲笑?
我的意思是:这听起来像您有传入的字符串 ,因此,您会收到一些Name对象。 这样:您的单元测试有一些测试输入数据,实例化NameParserService; 然后检查输出是否正确。 不需要任何模拟/存根!
如果您认为这会使您的代码更好,请进行重构。 我没有理由不把他们放在另一个班级。 它也可能使其更具可读性。 如果您不尝试获取实例变量,则无需在其中放置这些方法。 您可能希望对其进行保护,并将它们放入相同的软件包或默认(packet-private)访问权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.