问答式审核软件的设计模式

时间:2010-11-18 12:17:49

标签: c# .net design-patterns

我想建立某种调查/审计软件。 我正在集思广益如何构建我的类,如果有一个设计模式可以支持我。因为必须让生活变得更有吸引力......

我的应用程序应该包含标题和说明的问题。 然后我有多种类型的答案。

所以......一种类型可能是肯定/否定答案 另一种类型可以是1到10之间的值。 另一种类型可以免费文字回答 另一种类型可以是三个给定的文本选择,你可以选择一个(晚餐很棒,很好,点头很差)

因此,在调查计划网站上,我会写下我的问题并指定答案类型。

在执行调查时,我想把它作为一系列问题来回答......

基本上问题是如何统一所有不同的答案类型以及如何将它们存储在数据库中?

我看了复合材料和战略模式,但我不确定...... 我知道没有完美的解决方案,而且总是取决于......

但如果有人可以分享他们如何处理类似主题的最佳实践,那将会很棒......

提前致谢...

1 个答案:

答案 0 :(得分:2)

您在这里要问的是,数据库中可用的不同实体映射策略是什么?总之,你可以:

  1. 每个实体的表格
  2. 所有具有鉴别器值的实体的单个表,以识别每个实体(例如,值可能只是一个标记化的字符串) - 本质上是一个大的地图
  3. 每个实体的表格,可选属性为1:1连接
  4. 然后,您的ORM解决方案从数据库中读取数据并将其转换为适当类型的对象(实体),随着字段的填充。

    就中间层而言,您需要以下类:

    <强> AbstractQuestion

    问题的抽象基类。包含标题,描述和抽象的ask()和answer()方法。 AbstractQuestion将有各种子类,根据问题的类型提供不同的显示消息。例如,MultiChoiceQuestion将实现ask()方法,以便显示标题和描述(您可以将其提取到AbstractQuestion ask()方法中)以及所有可用选项(特定于每个子类) 。这可以推广,以便ask()将Map作为参数,可以使用您喜欢的任何内容填充。或者你可以使用varargs - 无论如何。

    回答

    只是一个包含Map的简单类,其中已知的键表示答案的不同方面,并引用了拥有的AbstractQuestion。

    <强>问卷

    排列在列表中的AbstractQuestions集合。对于每个AbstractQuestion,调用ask()方法,等待用户输入,然后使用提供的数据调用answer()方法。

    除非将抽象基类计为模式,否则不需要复杂的设计模式。以上内容并不完整,但应该足以让您入门。