如何忽略使用注入的构造函数中的“太多参数”

Spe*_*pen 8 dependency-injection sonarlint

如果您使用依赖注入,构造函数有许多参数是完全正常的。

sonarlint 是否可能不会为使用注入的构造函数显示“参数过多”代码气味警告?

Tri*_*mon 6

就我而言,Spring 服务需要许多其他服务才能完成其工作。所以规则squid:S00107被触发并在 SonarCube 中给了我一个错误。我发现这篇文章建议使用Lombok来解​​决这个问题,如下所示:

前:

@Component
public class EventService {

  private final String param1;
  private final String param2;
  private final String param3;
  private final String param4;
  private final String param5;
  private final String param6;
  private final String param7;
  private final String param8;
  private final String param9;

  public EventService(String param1, String param2, String param3, String param4, String param5, String param6, String param7, String param8, String param9) {
    this.param1 = param1;
    this.param2 = param2;
    this.param3 = param3;
    this.param4 = param4;
    this.param5 = param5;
    this.param6 = param6;
    this.param7 = param7;
    this.param8 = param8;
    this.param9 = param9;
  }

  ...
Run Code Online (Sandbox Code Playgroud)

后:

@Component
@RequiredArgsConstructor
public class EventService {

  private final String param1;
  private final String param2;
  private final String param3;
  private final String param4;
  private final String param5;
  private final String param6;
  private final String param7;
  private final String param8;
  private final String param9;

  ...
Run Code Online (Sandbox Code Playgroud)


mic*_*eak 3

正如其他发帖者之前指出的那样,方法或构造函数的太多参数表明在某种程度上违反了关注点分离原则。最好采用以下解决方案:

  • 如果是构造函数:构建器模式
  • 如果是方法:如果参数太多,则带有请求参数和构建器。

这可以避免参数混淆,即“第一个参数是 x、y 还是 z?”

如果所有尝试都失败,@SuppressWarnings("squid:S00107")请在要忽略的方法/构造函数顶部进行注释。这只能是最后一个资源。