继承链与多重扩展
Inheritance chain vs multiple extensions
继承链接是否应该避免?
我目前正在重构一个 java 项目,我遇到了许多 classes (8),它们都具有共享的功能。因此,使用 Extract Super Class 重构,我创建了一个具有该功能的 super class 并将其传递给所有 sub-classes。现在,classes 中的 2 个还具有第二个共享功能。我是否应该创建另一个继承自第一个超级 class 的超级 class,然后由子 classes 或 简单地扩展在 2 个子 classes 上扩展多个 classes?
想法
尽管这两个选项 都可以 工作,但我认为进行多次扩展更可取,因为它描述并阐明了 class 的职责。此外,我们将避免连续调用 super() 以达到顶级 super class.
另一方面,也许有一个继承链有点整理这个地方。
编辑:我明白我说的问题完全错了。上面提到的 8 个 classes 是为了遵守命令模式而设计的,因此每个都有不同的目的和功能。我已经提取了一个 super class 以避免它们的构造函数中的代码重复。其中两个 classes 也有更多的重复代码(不是 重复的功能,因为它们做同样的事情)。不幸的是,由于项目的性质,我没有编写原始代码以及时间紧迫的事实不允许我完全重构整个项目。比方说,目前无法修复。但是我能做的就是拼凑起来,尝试删除重复的代码并稍微整理一下这个地方。
在大多数情况下,这两种方法似乎都是不好的做法(有利于组合而不是继承)。如果你可以通过使用设计模式(外观、复合、适配器、装饰器...)来避免它。如果在您的情况下无法完成,我将应用封装和继承的原则。所以,链式继承的时候需要。
超级 classes 应该在它们建立 is-a
关系模型时使用。如果这 8 个 class 是同一个实体,可以使用一个公共的 super class 来避免重复。 Class 层次结构会很快损害可维护性,因此应尽可能简单。引入它们时,避免重复代码不是主要考虑的问题。
正如@davidza5 已经指出的,composition over inheritance 的原则适用于此。常用功能最好提取到 class 模型中 has-a
关系模型中,这样可以解耦功能并使其在以后更容易更改。
另一方面:如果重构在所有情况下都不起作用,这并不意味着它是错误的想法。如果它能为大多数人带来好的结果,那么解决异常的怪癖是一个很好的权衡。
继承链接是否应该避免?
我目前正在重构一个 java 项目,我遇到了许多 classes (8),它们都具有共享的功能。因此,使用 Extract Super Class 重构,我创建了一个具有该功能的 super class 并将其传递给所有 sub-classes。现在,classes 中的 2 个还具有第二个共享功能。我是否应该创建另一个继承自第一个超级 class 的超级 class,然后由子 classes 或 简单地扩展在 2 个子 classes 上扩展多个 classes?
想法
尽管这两个选项 都可以 工作,但我认为进行多次扩展更可取,因为它描述并阐明了 class 的职责。此外,我们将避免连续调用 super() 以达到顶级 super class.
另一方面,也许有一个继承链有点整理这个地方。
编辑:我明白我说的问题完全错了。上面提到的 8 个 classes 是为了遵守命令模式而设计的,因此每个都有不同的目的和功能。我已经提取了一个 super class 以避免它们的构造函数中的代码重复。其中两个 classes 也有更多的重复代码(不是 重复的功能,因为它们做同样的事情)。不幸的是,由于项目的性质,我没有编写原始代码以及时间紧迫的事实不允许我完全重构整个项目。比方说,目前无法修复。但是我能做的就是拼凑起来,尝试删除重复的代码并稍微整理一下这个地方。
在大多数情况下,这两种方法似乎都是不好的做法(有利于组合而不是继承)。如果你可以通过使用设计模式(外观、复合、适配器、装饰器...)来避免它。如果在您的情况下无法完成,我将应用封装和继承的原则。所以,链式继承的时候需要。
超级 classes 应该在它们建立 is-a
关系模型时使用。如果这 8 个 class 是同一个实体,可以使用一个公共的 super class 来避免重复。 Class 层次结构会很快损害可维护性,因此应尽可能简单。引入它们时,避免重复代码不是主要考虑的问题。
正如@davidza5 已经指出的,composition over inheritance 的原则适用于此。常用功能最好提取到 class 模型中 has-a
关系模型中,这样可以解耦功能并使其在以后更容易更改。
另一方面:如果重构在所有情况下都不起作用,这并不意味着它是错误的想法。如果它能为大多数人带来好的结果,那么解决异常的怪癖是一个很好的权衡。