在OO应用程序中使用枚举进行范围选择

时间:2011-07-30 14:08:49

标签: oop architecture class-design

我正在开发一个项目,其中包含大量表单,用户将填写这些表单以创建最终报告。这些问题中的大多数是多种选择。我正在努力应用应用程序中的类的适当架构。

为了交谈,我们可以说这是一起车祸报告。面向对象的方法将要求我们根据每个问题中包含的信息创建结构。所以我们有“车辆”,“意外”等课程。但是,如果“车辆在碰撞时移动的速度是什么”这样的问题呢?用户可以选择4个答案?

  • 小于10英里/小时
  • 11-30mph
  • 31-50mph
  • 超过50英里/小时

在课堂上存储此信息的正确方法是什么?我的第一个考虑因素是枚举:

enum CollisionSpeed {
   LessThan10,
   ElevenToThirty,
   ThirtyOneToFifty,
   MoreThanFifty
}

但是,由于数据结构基于演示文稿,因此感觉很脏。此外,如果他们改变范围,我们也必须更改枚举。

所以问题是,如何使用面向对象的方法处理这样的范围选择?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果非常通用且您有大量的问题,则可能会破坏非规范化是否是正确的方法。不是逐个建模每个单独的主题,而是可以提供一个抽象层,以便例如业务用户可以在没有IT参与的情况下添加更多问题。简单示例(伪编码):

class QuestionEntity {
    String question;
    enum type; // e.g. open question (freetext), closed question (check boxes), etc.
    String[] values // if it's a closed question
}

如上所述,这相当简单。由于我确实知道你的确切要求,我无法判断你的情况是否合理。事实上,它是为您的特定业务用例开发DSL。

也许答案并不像你预期的那样具体,但是当我读到你的问题时我想起了......