Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是配置类(dis)继承的正确OOP方法?_Oop - Fatal编程技术网

什么是配置类(dis)继承的正确OOP方法?

什么是配置类(dis)继承的正确OOP方法?,oop,Oop,我似乎无法正确地搜索这个。。。我有一个类(小部件),它表示来自数据层的数据库表 该表包含3种不同类型的记录,其中一种只使用5列,另一种使用10列等。每个记录都有一组不同的验证和业务规则,我希望通过业务层抽象来控制这些规则 创建3个具体类并将属性映射到单个数据库表类是否合适?我觉得我错过了使用接口或继承的机会 如果我想要下面这样的东西,我的小部件类不是从包含所有小部件的数据库表类继承吗?如果有,那么我将如何“隐藏”或剥夺特定小部件类型之间的属性 List<SmallWidget> sw

我似乎无法正确地搜索这个。。。我有一个类(小部件),它表示来自数据层的数据库表

该表包含3种不同类型的记录,其中一种只使用5列,另一种使用10列等。每个记录都有一组不同的验证和业务规则,我希望通过业务层抽象来控制这些规则

创建3个具体类并将属性映射到单个数据库表类是否合适?我觉得我错过了使用接口或继承的机会

如果我想要下面这样的东西,我的小部件类不是从包含所有小部件的数据库表类继承吗?如果有,那么我将如何“隐藏”或剥夺特定小部件类型之间的属性

List<SmallWidget> sw = BusinessLayer.GetWidgets<SmallWidget>();
List<MediumWidget> mw = BusinessLayer.GetWidgets<MediumWidget>();
List<LargeWidget> lw = BusinessLayer.GetWidgets<LargeWidget>(); 
List sw=BusinessLayer.GetWidgets();
List mw=BusinessLayer.GetWidgets();
List lw=BusinessLayer.GetWidgets();
谢谢你的建议。

继承被高估了

如果您想不出使用继承的理由(即没有共享代码),那么就不要使用它

它只是将这些课程结合在一起,从长远来看,这只会带来痛苦


您可以使table类成为每个小部件类的成员。然后每个小部件可以只公开必要的字段

然后,您将获得一个额外的优势,即如果您需要更改其中一个小部件以使用不同的表,则只需要更改其中一个小部件中的一小部分代码


请参见

如果业务规则没有重叠,只需忽略它们在同一个表中的事实(可能使用视图)并创建三个类即可。如果存在通用规则,则为这些规则创建一个基类并从中继承。基类将拥有所有列,但只公开公共列。在相应的子代中公开其他列。

使您的业务对象尽可能接近实际的业务实体-为三种类型的小部件创建三个单独的类-SmallWidget、MediumWidget和LargeWidget。让有一个数据类-映射到表的WidgetData。然后,您可以使用以下任一策略实现三个小部件类:

  • 将相关字段添加到三个类中的每个类。还添加一个构造函数,该构造函数接受WidgetData类型的对象。构造函数可以使用WidgetData对象的字段初始化字段
  • 只向WidgetData类型的每个类添加一个字段。将getter添加到三个类中,仅用于将get调用委托给WidgetData对象以检索所需字段的值的相关字段。此策略将避免在WidgetData和三个小部件类之间重复字段值,并且可能会节省一些内存

这将涵盖数据部分。然后,如果您觉得这三个小部件类之间有一些共性,您还可以创建一个基类,这三个小部件类可以扩展并在其中添加任何公共方法或字段。

“您可以使表类成为每个小部件类的成员。”当然,在不支持多重继承的语言中,你必须使用接口模式(或者,如果它是C++,模板,我相信),他不是在谈论多重继承。他说的
Widget
有一个
widgetable
。做一些家务活,这是一年后最好的答案。对不起,萨米特,没问题。很高兴它有用。