如何减少构造函数中的参数数量,其中一半是为基类提供的

我从Sonarqube那里得到了这段代码的味道:“构造函数有8个参数,大于授权的7个”

该类并不大,只有不到100行代码,但是需要将4个参数传递给基类。这些参数是从DI中注入的,因此我无法创建另一个模型并将其全部放入模型中。

我仅有的一种解决方案是在基类中使用IServiceProvider,因此我可以减少很多参数。但是我认为,使用ServiceProvider可以使代码不太干净

public class Baseclass : AuthenticationHandler (microsoft class)
{
   private readonly IE e;
   private readonly IF f;
   private readonly IG g;

   protected Baseclass(IA a,IB b,IC c,ID d,IE e,IF f,IG g) 
       : base(a,b,c,d)
   {
      this.e = e;
      this.f = f;
      this.g = g;
   }

   //some method use e,f,g
}

public class ChildClass : Baseclass
{
   private readonly IH h;

   // code smell here
   public ChildClass(IA a,IG g) 
        : base(a,d,e,g)
   {
      this.h = h;
   }

   //some method use h
}

在这种情况下,是否有任何解决方案可以帮助我减少参数,但仍保持代码的清洁和可读性?

感谢关注。

jiajia2xm 回答:如何减少构造函数中的参数数量,其中一半是为基类提供的

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3154150.html

大家都在问