使用数据库时可以使用类型检查代码吗?

时间:2019-01-19 09:19:48

标签: java oop design-patterns

我正在尝试向数据库中插入一些代码。但是,在使用彼此为子类的模型时遇到了一个问题。我有一个包含所有这些小节的列表。

List<Metric> metrics = experiment.getMetrics();

for(Metric m : metrics) {
    int id = m.getId();
    // type checking code

}

指标包含“等级”和“数量”的小写字母。每个反过来都有自己唯一定义的表。我对使用类型检查的想法感到矛盾。但是我看不到任何立即的解决方案。一种似乎似乎没有更好的替代方法是在Metric表中创建一个称为metric_type的新列。但这将导致与类型检查非常相似的事情。有什么建议吗?

2 个答案:

答案 0 :(得分:4)

由于不完全兼容的系统之间的映射,您遇到了Object-relational impedance mismatch。由于关系模型中的表之间无法进行继承,因此您将不得不在对象模型中牺牲一些使用继承的东西。除非您切换到object database,否则无论做什么都可能会出现边缘情况。

如果您在扩展Metric的类中定义自定义CRUD操作,则加载实体可能会很棘手。如果每个表都有自己的PK序列,并且Metric.get(id)Rating可以具有相同的数字PK值,则Quantity会确切加载什么。

您可以看一下JPA如何解决此问题。它使用自定义注释,例如@MappedSuperclass@Entity。我想这是类型检查的一种形式。

答案 1 :(得分:1)

我不建议您键入check

解决这个问题的OOP方法是在insert类中创建一个Metric方法。 然后使用将对象插入相应表的适当代码覆盖RatingQuality中的方法。

for(Metric m : metrics) {
    int id = m.getId();
    m.insert();

}

在循环内部,只需调用insert,由于后期绑定,将调用适当的方法并执行正确的代码。