详见本人在b站发的视频
什么是MVC?
- M: Model 模型,也叫实体类,一般用于和数据库等底层方面交互
- V: View 视图,一般为用户所看到的界面,直接于用户打交道
- C: Controller 控制器,一般用于联系Model和View和执行一些业务操作
为什么要用MVC模式来开发Java?
要从久远的JSP开发说起了......
当时主流使用JSP进行网页的开发,但是实际上JSP就是带有Java的HTML,这会使得JSP页面在后期很难去维护,耦合度过高,导致项目结构较为模糊.
这个时候MVC就可以解决很大一部分问题了
MVC解决了耦合性高的问题,使得在更改和维护项目时更加简单,耗费资源更少
当然,MVC开发模式并不是只适用于网页开发,下面的DEMO也是MVC模式哦
MVC开发模式结构图解
利用MVC开发模式写的小DEMO
创建"Model",编写Student类作为实体对象
public class Student {
private String rollNo;
private String name;
public String getRollNo() {
return rollNo;
}
public void setRollNo(String rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
创建视图(View)为用户所看到的界面
public class StudentView {
public void printStudentDetails(String studentName, String studentRollNo){
System.out.println("Student: ");
System.out.println("Name: " + studentName);
System.out.println("Roll No: " + studentRollNo);
}
}
创建Controller
public class StudentController {
public static void main(String[] args) {
//从数据库获取学生记录
Student model = retrieveStudentFromDatabase();
//创建一个视图:把学生详细信息输出到控制台
StudentView view = new StudentView();
StudentController controller = new StudentController(model, view);
controller.updateView();
//更新模型数据
controller.setStudentName("John");
controller.updateView();
}
private static Student retrieveStudentFromDatabase(){
Student student = new Student();
student.setName("Robert");
student.setRollNo("10");
return student;
}
}
设置程序的main方法(程序入口)
public class MVCPatternDemo {
public static void main(String[] args) {
//从数据库获取学生记录
Student model = retrieveStudentFromDatabase();
//创建一个视图:把学生详细信息输出到控制台
StudentView view = new StudentView();
StudentController controller = new StudentController(model, view);
controller.updateView();
//更新模型数据
controller.setStudentName("John");
controller.updateView();
}
private static Student retrieveStudentFromDatabase(){
Student student = new Student();
student.setName("Robert");
student.setRollNo("10");
return student;
}
}
执行程序,输出结果为
Student:
Name: Robert
Roll No: 10
Student:
Name: John
Roll No: 10
Q.E.D.