如何从构造函数中减少太多参数
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
}
我在命令服务中使用了 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
}