猿问

使用 DAO 模式对数据进行建模和访问

我正在用 Java 创建一个非常简单的应用程序,它将在嵌入式 Derby 数据库中存储问题。我决定使用 DAO 模式来访问数据库中的数据。我不能在这个项目中使用 ORM。

一个问题将包含我通常会在关系数据库中使用多对一关系建模的数据。此数据的一个示例是:

  • 一个问题将有一个类别。一类将有多个问题。

  • 一个问题的分数会是 1000、2000 或 3000。一个分数会有很多问题。

考虑到上述情况,我将创建三个表(括号表示列):

  • 问题(id、问题、scoreId、categoryId)

  • 分数(id,分数)

  • 类别(id,类别)

我的第一个问题是:

像我上面建议的那样在三个表中对我的数据进行建模是不好的做法/错误的方法吗?将分数和类别存储在单独的表中是否有任何好处?或者将它们合并到问题表中会更好吗?链接到具有单列的表(id 除外)的多对一关系对我来说似乎是多余的,因为不是存储引用分数/类别表的 id,我们可以简单地存储类别/分数的值(因为类别/分数表不存储任何附加信息)。

我的第二个问题是:

如果在不同的表中建模我的数据是正确的方法,那么我将如何使用 DAO 模式访问数据?我的困惑来自以下几点:

我会创建一个 DAO 来填充一个Question看起来像这样的模型对象:

public class Question {

    String question;

    String category;

    Integer score;

}

我会像这样创建 DAO 接口的具体实现:


public class QuestionAccessObject implements QuestionDao {

    private static final String TABLE_1 = "QUESTION"; 

    private static final String TABLE_2 = "SCORE";

    private static final String TABLE_3 = "CATEGORY";


    @Override

    public List<Question> getAllQuestions() {

        List<Question> questions = new ArrayList<>();


        //Run a query with joins across the three tables and iterate over the result to populate the list

        return questions;

    }

}

每个 DAO 对象不应该只关心数据库中的一个表吗?我上面列出的方法似乎不是解决此问题的最正确方法。单独的表也会使向数据库中插入数据变得非常混乱(我不明白如何使用 DAO 模式和多个表采取干净的方法)。为 Score 和 Category 表创建 DAO 真的没有意义..(如果我这样做,我将如何填充我的模型?)


慕桂英546537
浏览 146回答 2
2回答

吃鸡游戏

像我上面建议的那样在三个表中对我的数据进行建模是不好的做法/错误的方法吗?在单独的表中存储分数和类别有什么好处......?这是一个讨论的问题。如果score我宁愿将此信息与question.&nbsp;另一方面,category将在单独的表格中,因为更多的问题将共享相同的类别,因此它非常有意义。每个 DAO 对象不应该只关心数据库中的一个表吗?是的,DAO,一个对象应该关注单一的数据源——正如你所说。我当然会尽量避免任何,ComplexDao因为这些类往往会变得更复杂,而且方法的数量会随着时间的推移而增加。存在一个服务层将这些结果组合在一起,并使用相同的服务向控制器提供输出。
随时随地看视频慕课网APP

相关分类

Java
我要回答