我似乎无法正确地谷歌这个...我有一个类(Widget)代表数据层中的数据库表。
该表包含3种不同类型的记录,其中一个仅使用5列,另一个使用10列等。每个记录都有一组不同的验证和业务规则,我想用业务层抽象控制。
创建3个具体类并将属性映射到单个数据库表类是否正确?我觉得我错过了使用界面或继承的机会?
如果我想要类似下面的内容,我的Widget类是否会从包含所有小部件的数据库表类继承?如果确实如此,那么我将如何“隐藏”或删除特定小部件类型之间的属性?
List<SmallWidget> sw = BusinessLayer.GetWidgets<SmallWidget>();
List<MediumWidget> mw = BusinessLayer.GetWidgets<MediumWidget>();
List<LargeWidget> lw = BusinessLayer.GetWidgets<LargeWidget>();
感谢您的建议。
答案 0 :(得分:2)
继承被高估了!
如果您认为没有理由使用继承(即没有共享代码),那么请不要使用它。
它只是将各种课程结合在一起,从长远来看只会造成痛苦。
您可以使表类成为每个窗口小部件类的成员。然后每个小部件可以只显示必要的字段。
然后,您可以获得额外的好处,如果您需要更改其中一个小部件以使用不同的表,您只需要在其中一个小部件中更改一小部分代码。
答案 1 :(得分:0)
如果业务规则不重叠,只需忽略它们在同一个表中(可能使用视图)并创建三个类的事实。如果存在通用规则,请为这些规则创建基类并从中继承。基类将包含所有列,但只显示常用列。将其他列公开在适当的后代中。
答案 2 :(得分:0)
使您的业务对象尽可能接近实际业务实体 - 为三种类型的小部件创建三个单独的类 - SmallWidget,MediumWidget和LargeWidget。让我们有一个数据类 - 映射到表的WidgetData。然后,您可以使用以下任何一种策略实现三个窗口小部件类:
这将涵盖数据部分。然后,如果您觉得三个窗口小部件类之间存在某些共性,您还可以创建一个基类,三者可以扩展并在那里添加任何常用方法或字段。