【问题标题】:How to refer to hardcoded values in code from the database?如何从数据库中引用代码中的硬编码值?
【发布时间】:2014-11-28 09:03:14
【问题描述】:

在(MySQL)数据库中,我存储了一个视图层次结构,表中的每一行都指向一个视图。有几种类型的视图,但它们存储在同一个表中。

在应用程序代码中,每种类型的视图都有自己的类。数据库中的每一行都会实例化其中一个类。

我应该如何从数据库中引用这些类,以便应用程序知道要使用哪个类?

我能想到几种可能性:

  • 只需直接在表中指定类名,但这样做的缺点是,如果类名发生更改,则必须更改很多行(如果需要,可以在单个查询中完成)。
  • 有一个单独的表来存储类名,并使用外键指向存储正确类名的行。在这种情况下,我可以放弃在此查找表中使用 ID 字段,而是将类名作为主键和目标外键,并在类名更改时依赖级联 UPDATE

有更好的选择吗?

【问题讨论】:

    标签: mysql sql database oop


    【解决方案1】:

    如果我理解正确,您希望保持视图名称和类名称之间的关联。

    您的项目符号表明,同一类可以有多个视图,并且您的两个建议都有效。第二个项目符号的优点是您可以通过一次更新来更改类名。但这并没有给你带来太多好处,因为一旦不止一个类名发生变化,即关联本身发生变化时,你就需要更新不止一行。

    您甚至可以创建一个单独的表来保存此关联。这将是 n:m 关系的模型,这太笼统了,因此您必须对视图名称设置唯一约束。本质上,这只是将视图名称与类名称关联的问题考虑在内,并允许您完全更改此机制而不必弄乱您的表(持有此关联的表除外)。

    但实际上我不会在数据库中存储任何这些东西 (我还发现视图名称存储在数据库中而不是应用程序逻辑中,这很烦人)。存在类名这一事实与您的数据库无关。这是应用程序逻辑,应该在那里处理。因此,您需要一种在已知视图名称时实例化对象的方法。这对我来说就像一个经典的工厂。毕竟,如果一个类名发生了变化,那就是应用程序代码的变化,生活会更轻松,因为所有由此产生的变化也都在应用程序代码中。

    【讨论】:

    • 如果我不将类名存储在数据库中的任何位置,那么我如何知道在应用程序逻辑中要实例化哪个类?或者我应该使用一些单独的标识符,它仍然必须在某个地方硬编码到类中?
    猜你喜欢
    • 2019-07-06
    • 2021-03-18
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多