针对“参数过多”警告的解决方案

在我的一些方法中,参数太多,很难维护和阅读源代码。有时我担心的问题是“他们是否以适当的顺序传递适当的值?"

我正在使用Checkstyle作为我的Eclipse插件,这给了我超过7个参数的警告。

我不确定它是否只是一个编码标准,我不在乎它。但是,当通过视图服务dao传递许多参数时,我注意到它很难阅读,以后也很难修改。

因此,我正在尝试通过这些参数...

  1. 许多对象Bean。但这给我带来了另一个问题,因为我的参数不会得到任何保证(不确定它们是否存在)。

  2. 哈希映射类型参数。但这可能会迫使我检查一些验证,并尝试从方法调用端匹配密钥

上述两种方法也可能丢失编译时错误检查。是否有任何减少参数计数的建议?


答案 1

传递HashMap是非类型脚本语言中的常见做法,但在Java中是一种不好的做法。它击败了强类型化的优势,这是您在Java中获得生产力的一部分。换句话说,Java编译器将无法帮助您在开发过程中发现错误,并且您更有可能在运行时捕获它们。

如果您传递的参数在概念上是相关的,则可以像您提到的那样将它们分组到适当的对象中。例如,如果要传递参数(例如,firstName、lastName、dateOfBirth 等),则可以改为传递具有这些属性的 Person 对象。这使用OO使您的设计更易于考虑和维护。

如果我理解你的意思:“但这给我带来了另一个麻烦,因为我的参数不会得到任何保证(不确定是否包含)”,你可以在实例化Person或等对象时强制执行你需要的保证。一种方法是使用不可变的 Person(等)对象:没有 setter,而是通过构造函数传递所有参数。抛出非法争论异常,如果它们不是全部正确。

祝你好运!


答案 2

有一些技术可以减少参数的数量;

  1. 使用最小化的方法(将方法分解为多个方法,每个方法只需要参数的子集)
  2. 使用实用程序类(帮助程序类)来保存参数组(通常是静态成员类)
  3. 使生成器模式从对象构造调整为方法调用。
  4. 尝试通过更好的体系结构设计来减少单独包之间的数据流。

参考一些标准的java书籍;

  • Java:如何编程
  • Head First Java
  • 有效的Java

还要尝试学习设计模式,它将非常有用,作为最佳编码实践。

  • 头部优先设计模式

推荐