gpt4 book ai didi

c# - 这对这种情况有意义 - 类 vs 接口(interface) vs 抽象?

转载 作者:行者123 更新时间:2023-11-30 12:22:03 25 4
gpt4 key购买 nike

我在数据库中有一个“Package”表。

一个套餐可以分为三种类型:套餐A、套餐B和套餐C。

这三个包都有一些共同的字段,比如
1)姓名
2)尺寸
3)重量

现在来到独特的领域:

包 A 和 B 必须包含 -
a) channel

包C必须包含-
一)完成

因此,我在数据库中创建了一个名为“Package”的表。
“Package”的列将是:

1)编号
2)类型(1 = PackageA,2 = PackageB,3 = PackageC)
3)姓名
4)尺寸
5)重量
6) channel (套餐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。

编辑:数据库部分呢?像“ channel ”(包 A 和 B 需要)(包 C 不需要)和“完成”(包 C 需要)(包 A 和 B 不需要)这样的字段/列具有“null”是否很常见"何时不需要/用于特定的包裹类型?

最佳答案

这种方法唯一的错误是 channelPackageAPackageB 中重复。您可以通过为共享 channel 的两种包类型添加另一个基类来修复它:

public abstract class PackageWithChannel : Package {
public Channel Channel {get;set;}
}
public class PackageA : PackageWithChannel {
...
}
public class PackageB : PackageWithChannel {
...
}

这消除了 Channel 属性的重复。

至于数据库部分,有多种方法可以将类层次结构映射到 RDBMS,从用于属性值列表的单个表到具有类型字段的每个层次结构的表。您选择了一个层次结构一个表,这是完全有效的。

关于c# - 这对这种情况有意义 - 类 vs 接口(interface) vs 抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42608753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com