Architecture 有些方法不';对于最常用的构造函数,它不起作用

Architecture 有些方法不';对于最常用的构造函数,它不起作用,architecture,refactoring,Architecture,Refactoring,我遇到了一个2000多行的班级。它有两个构造函数——一个简单的构造函数和一个复杂的构造函数。大多数方法对于这两个构造函数都能很好地工作,但是如果使用简单构造函数实例化对象,则有少数方法会失败或行为异常 在这种情况下继承是可能的,但这会有点奇怪。它不是一个不同的对象,它只是一个不同的构造函数 在调用需要复杂构造函数的方法时抛出异常将是一个难看的补丁 有没有标准的重构或模式可以解决这个问题?它不仅仅是一个不同的构造函数。您定义的方法在调用某个构造函数时无法正常工作。也就是说,它们是无效的。这有点像定

我遇到了一个2000多行的班级。它有两个构造函数——一个简单的构造函数和一个复杂的构造函数。大多数方法对于这两个构造函数都能很好地工作,但是如果使用简单构造函数实例化对象,则有少数方法会失败或行为异常

在这种情况下继承是可能的,但这会有点奇怪。它不是一个不同的对象,它只是一个不同的构造函数

在调用需要复杂构造函数的方法时抛出异常将是一个难看的补丁


有没有标准的重构或模式可以解决这个问题?

它不仅仅是一个不同的构造函数。您定义的方法在调用某个构造函数时无法正常工作。也就是说,它们是无效的。这有点像定义一辆车,它有启动引擎、移动副翼和倒车的方法。一个适用于两者,一个适用于飞机,一个适用于汽车。在我看来,您需要继承。

它不仅仅是一个不同的构造函数。您定义的方法在调用某个构造函数时无法正常工作。也就是说,它们是无效的。这有点像定义一辆车,它有启动引擎、移动副翼和倒车的方法。一个适用于两者,一个适用于飞机,一个适用于汽车。在我看来,您需要继承。

如果您的意图是方法的可用性取决于调用哪个构造函数,那么它们应该是不同的对象

最好定义单独的类,或者修复构造函数,使它们都能创建有效的对象,并且所有方法都是有效的

如果您决定它确实应该是一个类,那么一种可能有助于实现这一点的常见模式是“链式构造函数”,在这种模式中,您的简单构造函数调用更复杂的构造函数,并为缺少的参数提供适当的默认值

另一方面,如果您决定使用两个类,它可能是一个继承关系,更复杂的类扩展了更简单的类,或者它可能是一个复合关系,其中更复杂的类包含一个作为更简单类对象的字段,并将一些功能委托给另一个类


更具体、更明确的建议需要看到一些代码(但不是2000多行)显示问题。

如果您的意图是方法的可用性取决于调用哪个构造函数,那么它们应该是不同的对象

最好定义单独的类,或者修复构造函数,使它们都能创建有效的对象,并且所有方法都是有效的

如果您决定它确实应该是一个类,那么一种可能有助于实现这一点的常见模式是“链式构造函数”,在这种模式中,您的简单构造函数调用更复杂的构造函数,并为缺少的参数提供适当的默认值

另一方面,如果您决定使用两个类,它可能是一个继承关系,更复杂的类扩展了更简单的类,或者它可能是一个复合关系,其中更复杂的类包含一个作为更简单类对象的字段,并将一些功能委托给另一个类


更具体和明确的建议需要看到一些代码(但不是2000多行)显示问题。

@closevoter-这是怎么离题的?@closevoter-这是怎么离题的?