首页 > 解决方案 > 在超类责任上构造派生类

问题描述

拥有像 Animal 这样的具有方法和属性的实体,假设我将拥有扩展 Animal 的其他实体,例如 Cat、Dog 等。所以,我的应用程序知道 Animal,我的意思是,方法接收 Animal 作为参数,在我的数据库中我有一个名为 Animals 的表。因此,为了构造 Cat、Dog 等的实例,我有三个选择:

  1. 为超类中的每个派生类创建一个构造函数,该构造函数将派生类作为参数
  2. 在派生类中创建调用超类中方法的构造函数
  3. 为每个派生类使用模型映射器,以便将派生类的属性映射到超类

我不喜欢选项 1,因为首先,对于我可以创建的每个派生类,我应该打开类 Animal 并在其上创建一个构造函数。这将违反 OPEN/CLOSED 原则。第二个原因是我认为超类不应该知道派生类,只知道对面。你同意吗?

选项 2 和 3 呢?

谢谢!

标签: constructorsuperclassmodelmapperopen-closed-principle

解决方案


推荐阅读