我从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
}
在这种情况下,是否有任何解决方案可以帮助我减少参数,但仍保持代码的清洁和可读性?
感谢关注。