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

时间:2019-12-18 05:56:57

标签: c# design-patterns .net-core sonarqube coding-style

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

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

}

答案 2 :(得分:0)

您可以使用Struct,Class Object或Tuple实现所需的功能。

Struct和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
}

答案 3 :(得分:-2)

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

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

希望this个帖子对您有所帮助。