Design patterns 代码重构-长基/超级参数列表

Design patterns 代码重构-长基/超级参数列表,design-patterns,refactoring,builder,Design Patterns,Refactoring,Builder,这些文章详细介绍了如何修复长构造函数 但是他们没有说的是,我们如何通过一个长的super()或base()调用来解决这个问题?即 基本上,当我有多个构造函数并且每个构造函数都有一个长的base()调用时,这会让我很恼火。可以使用ParameterObject设计模式将多个参数值组合到一个对象中。考虑一下这样的设计: public class MyClassOld { MyClassOld(param1,param2,param3,param4) {...} } 写为 p

这些文章详细介绍了如何修复长构造函数

但是他们没有说的是,我们如何通过一个长的super()或base()调用来解决这个问题?即


基本上,当我有多个构造函数并且每个构造函数都有一个长的base()调用时,这会让我很恼火。

可以使用
ParameterObject
设计模式将多个参数值组合到一个对象中。考虑一下这样的设计:

public class MyClassOld { 
     MyClassOld(param1,param2,param3,param4) {...}  
}
写为

public class ParamObject {
    ParamObject(param1,param2,param3,param4) { }
}

public class MyClassNew {
    MyClassNew(ParamObject p) {}
}

public class MyChildClassNew {
    MyChildClassNew(ParamObject p) { super(p); }
}

现在,您可以为
ParamObject
添加一个生成器模式,以使构建
ParamObject
更容易。

是的,我意识到这一点,但请注意,InheritsLongConstructorClass不接受任何参数,它很难设置为base()中规定的值。如果不首先将其传递给InheritsLongConstructorClass(),就无法声明ParameterObject并将其传递给base。我认为在这种情况下,最好创建一个
ParameterObject
,以包含
LongConstructorClass
的值。至少现在您将把混乱限制在
继承slongconstrutorclass
。然后,您可以调用
base(new ParameterObject().p1(..).p2(..).build())
…或者如果您能够修改这些类,那么您可以使用参数对象模式做更多工作。我认为您应该看看您的实际用例。您能否确定一个或多个概念,通过这些概念可以将参数分组在一起?您不必只使用一个参数对象。正如所说:“通常您会看到一组特定的参数倾向于一起传递。几个方法可能会在一个类或几个类中使用此组”
public class ParamObject {
    ParamObject(param1,param2,param3,param4) { }
}

public class MyClassNew {
    MyClassNew(ParamObject p) {}
}

public class MyChildClassNew {
    MyChildClassNew(ParamObject p) { super(p); }
}