我有一个"包"数据库中的表。
一个包可以有三种类型:包A,包B和包C.
所有三个包都有一些常见的字段,如
1)名称
2)尺寸
3)重量
现在来到独特的领域:
套餐A& B必须包含 -
a)频道
包裹C必须包含 -
一)完成
所以,我创建了一个名为" Package"的表。在数据库中 "包"的列那就是:
1)ID
2)类型(1 = PackageA,2 = PackageB,3 = PackageC)
3)名称
4)大小
5)重量
6)通道(包装C不需要)
6)完成(包装A和B不需要)
因此,我创建了一个类似于下面的抽象类(忽略属性的数据类型):
public abstract class Package
{
public id;
public type;
public name;
public size;
public weight;
}
public class PackageA : Package
{
public channel;
}
public class PackageB : Package
{
public channel;
}
public class PackageC : Package
{
public completion;
}
这种方法我会做错什么? Package类应该是抽象的还是简单的类?
因为我不希望其他人直接在Package类上工作,而是采用Package A,B,C。
答案 0 :(得分:2)
这种方法唯一不对的是channel
和PackageA
之间的PackageB
重复。您可以通过为共享channel
的两种包类型添加另一个基类来修复它:
public abstract class PackageWithChannel : Package {
public Channel Channel {get;set;}
}
public class PackageA : PackageWithChannel {
...
}
public class PackageB : PackageWithChannel {
...
}
这消除了Channel
属性的重复。
对于数据库部分,有不同的方法将类层次结构映射到RDBMS,范围从属性值列表的单个表到具有类型字段的每个层次表。您选择了每个层次的表,这完全有效。