Java 学生类使用静态方法getAllStudents()有意义吗?

Java 学生类使用静态方法getAllStudents()有意义吗?,java,class,model-view-controller,static,dao,Java,Class,Model View Controller,Static,Dao,我正在为一个Java项目练习MVC、DAO和其他设计模式 假设我有一个与学生类模型交互的页面控制器 public class Student { private int id; private String name; public Student(int id, String name) { this.id = id; this.name = name; } //Getters and setters blabla }

我正在为一个Java项目练习MVC、DAO和其他设计模式

假设我有一个与学生类模型交互的页面控制器

public class Student {
    private int id;
    private String name;
    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
    //Getters and setters blabla
}
很明显,我有一个StudentDAO接口和StudentDAOImpl,它执行SQL查询和其他东西

假设PageController需要检索所有学生的列表(在其页面上列出他们),显然我有一个SQL查询来检索学生列表,在StudentDAOImpl中使用Java方法实现

但是我应该在哪里实例化studentDao(StudentDAOImpl的实例)? 我可以简单地在Student中创建一个检索所有学生的静态方法吗?这个静态方法将简单地实例化studentDAO并执行其getAllStudents方法来检索所有学生


或者我可以简单地在PageController中实例化studentDao,然后从那里完成所有的工作?

在主要情况下,我认为您可以使用

DAO不是一个模型,所以您可以添加一个方法。我假设PageController将有一个StudentRepository(StudentDAO),其中将有一个getAll方法

结构主要取决于应用程序的逻辑。

将getAllStudents(数据库访问方法)添加到Student类实际上与名为 对某些人来说,这通常是一种反模式。请看下面的详细说明

另一方面,您提到您正在使用DAO,这对于相同的用例是不同的。我建议你只选择一个选项

如果您依赖于DAO,那么与数据访问相关的所有内容都会用到DAO。模型类必须仅保留数据。但是,请注意,这将导致您出现一个错误,这反过来也有其自身的缺点

我首选的方法是,它以更一致的方式平衡数据相关类的责任

关于在何处实例化DAO,经验法则是:不要这样做。改用。
它更好,因为它利用了代码的可测试性和可维护性。

哪种方式最有效地满足您的特定需求?@RobertHarvey我真的不知道,这些选项都没有限制我的可能性,但我不知道将Dao实例放在控制器中有多正确。或者,为了在Student中创建一个执行getAllStudents()的静态方法,我实际上更喜欢第二种方法,因为我可以将所有Dao内容放在我的项目的模型部分。“正确”用什么度量?如果您喜欢第二种方法,那么就使用它。@RobertHarvey with Correct我的意思是“遵循MVC/Dao模式”我猜DDD与这些存储模式没有任何关系,是吗?DDD没有任何关于如何持久化数据的内容;这是一个实现细节。@RobertHarvey实际上,这是一个关于如何实现存储库的细节。然而,问题是如何组织检索数据的方法,因为这是一项研究,至少值得提及一种更广泛的方法。