Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MVC模式在单个和多个对象中的实现_Java_Design Patterns_Model View Controller - Fatal编程技术网

Java MVC模式在单个和多个对象中的实现

Java MVC模式在单个和多个对象中的实现,java,design-patterns,model-view-controller,Java,Design Patterns,Model View Controller,我已经用MVC模式实现了一个学生管理(教程:)。我决定将学生分为“单一学生模型”和“多重学生模型”,但我不确定这在我的案例中是否有意义。总的来说,我对我的解决方案不满意。是否可以使用一个控制器处理单个学生和多个学生? 如果模型导入到视图类中(参见StudentsView.java),可以吗 我如何改进这个项目 提前谢谢 java(模型,数据类(?) SingleStudentModel.java(模型) java(控制器->单学生模型) MultipleStudentModel.java(模型)

我已经用MVC模式实现了一个学生管理(教程:)。我决定将学生分为“单一学生模型”和“多重学生模型”,但我不确定这在我的案例中是否有意义。总的来说,我对我的解决方案不满意。是否可以使用一个控制器处理单个学生和多个学生? 如果模型导入到视图类中(参见StudentsView.java),可以吗

我如何改进这个项目

提前谢谢

java(模型,数据类(?)

SingleStudentModel.java(模型)

java(控制器->单学生模型)

MultipleStudentModel.java(模型)

StudentView.java

public class StudentView {
    public void printStudentDetails(String _name, int _nr){
        System.out.println("Student: ");
        System.out.println("name: " + _name);
        System.out.println("nr: " + _nr);
    }
}
import java.util.List;

public interface StudentView {
    void printStudentList(List<Student> students);
}
import java.util.List;

public class SingleStudentView implements StudentView {

    @Override
    public void printStudentList(List<Student> students) {
        Student s = students.get(0);
        System.out.println(s);
    }
}
import java.util.List;

public class MultipleStudentView implements StudentView {

    @Override
    public void printStudentList(List<Student> students) {
        for (Student s : students) {
            System.out.println(s);
        }
    }
}
StudentsView.java

import com.mvc.model.Student;

import java.util.Collection;

public class StudentsView {

    public void printStudentList(Collection<Student> students){

        System.out.println("\nStudent list");

        for(Student item : students){
            System.out.println("name: " + item.getName());
            System.out.println("nr: " + item.getNr());
        }
    }
}

您可以创建
model
的接口,以便实现
MultipleStudentModel
SingleStudentModel
两个类

因此,您不需要定义两个基本上共享相同逻辑的控制器,也可以使用
setModel

这还将创建一个契约,将您的模型绑定到特定的方法,如get和诸如此类的方法(insert/update/delete)

您也可以使用
视图
类来执行此操作

而且,基本上一个学生只是一个学生列表,其中只包含 一个元素,您可以删除该冗余


有一些建议:

1.使用接口而不是类。 您可能听说过,如果您有多个同类对象的实现,例如本例中的
model
view
,那么这是一种更好的方法。因此,更好的方法是将这两个对象抽象为接口,而不是类:

StudentView.java

public class StudentView {
    public void printStudentDetails(String _name, int _nr){
        System.out.println("Student: ");
        System.out.println("name: " + _name);
        System.out.println("nr: " + _nr);
    }
}
import java.util.List;

public interface StudentView {
    void printStudentList(List<Student> students);
}
import java.util.List;

public class SingleStudentView implements StudentView {

    @Override
    public void printStudentList(List<Student> students) {
        Student s = students.get(0);
        System.out.println(s);
    }
}
import java.util.List;

public class MultipleStudentView implements StudentView {

    @Override
    public void printStudentList(List<Student> students) {
        for (Student s : students) {
            System.out.println(s);
        }
    }
}
以下是
模型
视图
的实现:

SingleStudentModel.java

import java.util.List;

public interface StudentModel {
    List<Student> getStudents();
}
import java.util.List;

public class SingleStudentModel implements StudentModel {

    private List<Student> students; // store one student;   

    public SingleStudentModel(List<Student> students) {
        this.students = students;
    }
    @Override
    public List<Student> getStudents() {
        return this.students;
    }
}
import java.util.List;

public class MultipleStudentModel implements StudentModel {

    private List<Student> students;

    public MultipleStudentModel(List<Student> students) {
        this.students = students;
    }
    @Override
    public List<Student> getStudents() {
        return this.students;
    }
}
代码结构:

-src
├ view
│  ├ MultipleStudentView.java
│  ├ SingleStudentView.java
│  └ StudentView.java
├ model
│  ├ MultipleStudentModel.java
│  ├ SingleStudentModel.java
│  ├ Student.java
│  └ StudentModel.java
├ controller
│  └ StudentController.java
└ Main.java
这些都是这里的代码,希望有帮助~


(顺便说一句,在典型的JavaEE开发中,模型只是POJO,而视图更常见的是类似字符串的逻辑视图。这只是理解MVC的一个示例。)

这更像是一个代码审查问题。我建议您将这些问题发布到codereview.stackexchange.com,而不是Stack Overflow。
import java.util.List;

public class SingleStudentModel implements StudentModel {

    private List<Student> students; // store one student;   

    public SingleStudentModel(List<Student> students) {
        this.students = students;
    }
    @Override
    public List<Student> getStudents() {
        return this.students;
    }
}
import java.util.List;

public class MultipleStudentModel implements StudentModel {

    private List<Student> students;

    public MultipleStudentModel(List<Student> students) {
        this.students = students;
    }
    @Override
    public List<Student> getStudents() {
        return this.students;
    }
}
import java.util.List;

public class SingleStudentView implements StudentView {

    @Override
    public void printStudentList(List<Student> students) {
        Student s = students.get(0);
        System.out.println(s);
    }
}
import java.util.List;

public class MultipleStudentView implements StudentView {

    @Override
    public void printStudentList(List<Student> students) {
        for (Student s : students) {
            System.out.println(s);
        }
    }
}
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {

        List<Student> student = new ArrayList<>();
        List<Student> students = new ArrayList<>();
        // add test cases
        student.add(new Student("s1", 1));
        for (int i = 0; i < 5; i++) {
            students.add(new Student("s" + i, i));
        }

        StudentModel singleStudentModel = new SingleStudentModel(student);
        StudentModel multipleStudentModel = new MultipleStudentModel(students);

        StudentView singleStudentView = new SingleStudentView();
        StudentView multipleStudentView = new MultipleStudentView();


        StudentController controller = new StudentController();

        controller.addModelAndView(singleStudentModel, singleStudentView);
        controller.addModelAndView(multipleStudentModel, multipleStudentView);

        System.out.println("---------- update single student's view ---------------");
        controller.updateView(singleStudentModel);
        System.out.println("---------- update multiple students' views ---------------");
        controller.updateView(multipleStudentModel);
    }
}
---------- update single student's view ---------------
Student (name=s1, rollNo=1)
---------- update multiple students' views ---------------
Student (name=s0, rollNo=0)
Student (name=s1, rollNo=1)
Student (name=s2, rollNo=2)
Student (name=s3, rollNo=3)
Student (name=s4, rollNo=4)
-src
├ view
│  ├ MultipleStudentView.java
│  ├ SingleStudentView.java
│  └ StudentView.java
├ model
│  ├ MultipleStudentModel.java
│  ├ SingleStudentModel.java
│  ├ Student.java
│  └ StudentModel.java
├ controller
│  └ StudentController.java
└ Main.java