我在命令服务类中为构造函数使用了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
}
答案 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个帖子对您有所帮助。