问答审核软件的设计模式

发布于 2024-10-02 23:57:10 字数 1435 浏览 1 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嗫嚅 2024-10-09 23:57:10

您在这里似乎要问的是数据库中可以使用哪些不同的实体映射策略?简而言之,您可以拥有:

  1. 每个实体一个表
  2. 用于所有实体的单个表,并具有用于识别每个实体的鉴别器值(例如,值可能只是一个标记化字符串) - 本质上是一个大映射
  3. 每个实体一个表,具有 1:1 连接可选属性

然后,您的 ORM 解决方案从数据库读回数据,并将其转换为填充字段的适当类型的对象(实体)。

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

AbstractQuestion

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

Answer

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

问卷

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

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

What you seem to be asking here is what are the different entity mapping strategies that are available to you in the database? In short you can have:

  1. a table per entity
  2. a single table for all entities with a discriminator value to identify each one (values could be just a tokenized string for example) - essentially a big Map
  3. a table per entity with 1:1 join for optional properties

Your ORM solution then reads the data back from the database and turns it into the appropriate type of object (the entity) populating the fields as it goes.

In terms of the middle tier, you will need the following classes:

AbstractQuestion

An abstract base class for questions. Containing title, description and abstract ask() and answer() methods. There will be a variety of subclasses for AbstractQuestion that provide different display messages depending on the type of question. For example, MultiChoiceQuestion will implement the ask() method in such a way that the title and description get displayed (you could pull this up into the AbstractQuestion ask() method) along with all the choices available (which is specific to each subclass). This could be generalised so that ask() takes a Map as a parameter which can be populated with anything you like. Or you could use varargs - whatever.

Answer

Just a simple class containing a Map with known keys representing the different aspects of the answer with a reference to the owning AbstractQuestion.

Questionaire

A collection of AbstractQuestions arranged in a list. For each AbstractQuestion call the ask() method, wait for user input, then call the answer() method with the provided data.

No need for complex design patterns, unless you count abstract base classes as a pattern. The above is not complete, but it should be enough to get you started.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文