【问题标题】:Defining the structure of hierarchical data versus actually storing the data定义分层数据的结构与实际存储数据
【发布时间】:2011-09-14 22:38:04
【问题描述】:

我正在尝试开发一个可以处理各种类型的响应的调查应用程序,例如布尔值、多项选择,以及从 1-5、1-10、1-100、-2 到 +2 的范围,甚至十进制值。所以,我创建了响应类型的层次结构:

class Response {
        String name
}

class BooleanResponse extends Response {
        boolean score
}

class SimpleGradeResponse extends Response {
        char score // A-F
}

class ComplexGradeResponse extends Response {
        char score // A-F
        char modifier // +, -, blank
}

class IntegerResponse extends Response {
        int min, max, score
}

class DecimalResponse extends Response {
        double min, max, score
}

我认为这是元数据。它描述了调查响应类型。您可以有问题 1 是从 1 到 10 的 IntegerResponse,问题 2 是从 0 到 100 的 IntegerResponse,问题 3 是 DecimalResponse,等等。

我不确定在哪里存储用户的实际响应。您是否将分数与元数据混合在一起,就像我在上面的分数字段中所做的那样?这看起来很尴尬,因为每个范围类型的响应都带有最小值和最大值。

我真正想要的(我认为)是能够对范围响应参数进行柯里化以创建新类型,然后将该类型反映在实际响应表中。因此,范围为 1-10 的问题将是 IntegerResponse 中 min=1 且 max=10 的一行。但是 ActualResponse 表(我需要改进命名约定,一旦我弄清楚这一点!)如何保存分数并引用设置了 min 和 max 的 curried IntegerResponse?

如果有更好的方法来解决整个问题,我很想听听。

谢谢, 李

【问题讨论】:

  • 在我看来,您的问题与 grails 或 groovy 无关,而更多是在领域建模和面向对象设计领域......

标签: oop design-patterns


【解决方案1】:
  1. minmax 应该存储在 Question 对象中,甚至存储在 QuestionType 中 - 取决于系统在运行时的灵活性。
  2. 对不同类型的Responses 会有任意限制吗?数据结构在很大程度上取决于它。您可以硬编码不同的Response 类型或在运行时支持它们。第一种方法要简单一个数量级。

【讨论】:

  • 谢谢,维克多。我试图理解你的帖子,但我不确定我是否明白。问与答的关系是什么?您如何强制特定响应属于某种问题类型?关于您的第 2 项,我认为硬编码响应类型是可以的,尽管我不太明白这如何简化事情。这不只是常数 min/max 的问题,而不是成员变量 min/max 的问题吗?或者你指的是比我的例子更复杂的东西?我很抱歉地说你可能不得不用勺子喂我这个。 :-) 非常感谢您的回复。
  • 可能我有一个非常不同的调查结构。您能否提供一些您正在考虑的问题示例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多