我有一个Java类,它变得越来越长。当我将它通过代码质量工具运行时,我会因为类中的行数而被标记。
这是一个较低层次的类,由上层使用Spring的@Autowired
。该类有许多私有实例方法,这些方法不是静态的。它们不使用任何实例字段,只在方法参数上工作。
我能否安全地将这些方法作为public static
移动到某个单独的实用程序类中?有哪些缺点?
这里存在着一个“错误”的心态。
你不应该仅因为工具对某些方面进行抱怨就重新设计你的类。
你想要提高你的源代码的质量;这些工具可以帮助你找出值得思考的“话题”。你应该把它们的反馈看作是提示而不是命令。
因此,你不用担心类中有多少“代码行数”。相反,你应该关注这个类所承担的职责。也就是说,代码行数本身并不是问题——但是违反了单一职责原则才是问题所在。
因此:你需要退后一步,查看你的类到底在做什么。当一个类明显在做多于一个的事情时,你就需要将这些方面分离成其他类!
也就是说:如果你确实发现所有的这些代码都“属于”该类的职责;那么你就应该让它留在那里。不要仅仅因为一些工具警告你代码行数而将一些内部实现细节放到无关联的辅助类中。
另一方面,将私有方法转换为静态/包保护的方式可以让你对这些方法进行单元测试。这可能是一个优势。但是正如之前所说的:只要涉及实现细节,它们应该保持私有,并且无需进行单元测试。
最后,了解并理解“干净代码”的含义,并尝试遵循其中阐述的思想。
方法的划分应该按照目的/应用程序/逻辑(你可以自己命名),而不是按照技术属性。
长源代码可能可以分成几个小型类,每个类都有自己独立的目的/责任。
abstract
。有一个子类扩展基类,并提供基类中抽象方法的实现。 static 访问具有多次访问的大型方法相比,通过对象创建访问它可能更好
经常使用的实用程序方法可以被制作为 static
@Autowired
注入的JdbcTemplate
,另一个是使用@Value
注入的String
。 - Sabir Khan