如何从构造函数中减少太多参数

How to reduce too many parameters from constructor

我在命令服务中使用了 9 个参数给构造函数 class。但是 sonarqube 显示构造函数过多的错误。谁能提出解决方案或设计模式来解决这个问题?

public CustomerCommandService(A a, B b, C c, D d, E e, F f, G g, H h, I i){
//some code here
}

当一个函数似乎需要两个或三个以上的参数时,很可能其中的一些 这些论点应该包含在它们自己的 class 中 。例如,考虑 以下两个声明之间的区别:

Circle makeCircle(double x, double y, double radius);
Circle makeCircle(Point center, double radius);

希望thispost对您有所帮助。

这不是错误,而是警告。无论如何,您应该避免使用尽可能多的参数。尝试将您的服务分解为一些子服务。另外,正如 Div 所说,您可以使用 builder pattern.

您是否考虑过使用 Struct 来包含您的不同参数,然后将此结构传递给您的构造函数

public struct CustomerParams
{
    A a;
    B b;
    ...
}
public CustomerCommandService(CustomerParams cp)
{

}

您可以使用 Struct、ClassObject 或 Tuple 来实现您想要的。

结构和Class几乎一样,只是关键字会变。示例:

struct Pack
{
     int a,b;
     float c,d;
     String e;
}

public static Main()
{
     Pack pack = new Pack();
     pack.a=10;
     pack.b=30;
     ...
     CustomerCommandService ccs = new CustomerCommandService(pack);
}

public CustomerCommandService(Pack pack){
      //some code here
}

元组样本:

public static Main()
{
     var pack = Tuple.Create(1, 2, 10.4, 30.5, "Steve");
     CustomerCommandService ccs = new CustomerCommandService(pack);
}

public CustomerCommandService(Tuple<int,int,float,float,string> pack){
      //some code here
}