模型视图控制器(MVC) 设计模式指定应用程序由数据模型、表示信息和控制信息组成。该模式要求将其中的每一个都分成不同的对象。
MVC 更像是一种架构模式,而不是完整的应用程序。 MVC 主要与应用程序的 UI/交互层有关。您仍然需要业务逻辑层,可能还需要一些服务层和数据访问层。
UML 图 MVC 设计模式
设计组件
- 模型只包含纯应用程序数据,它不包含描述如何向用户呈现数据的逻辑。
- 视图将模型的数据呈现给用户。视图知道如何访问模型的数据,但它不知道这些数据意味着什么或用户可以做什么来操作它。
- 控制器存在于视图和模型之间。它侦听由视图(或其他外部源)触发的事件,并对这些事件执行适当的反应。在大多数情况下,反应是调用模型上的方法。由于视图和模型是通过通知机制连接的,因此此操作的结果会自动反映在视图中。
让我们看一个 MVC 设计模式的例子。
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;
}
}
class StudentView
{
public void printStudentDetails(String studentName, String studentRollNo)
{
System.out.println("Student: ");
System.out.println("Name: " + studentName);
System.out.println("Roll No: " + studentRollNo);
}
}
class StudentController
{
private Student model;
private StudentView view;
public StudentController(Student model, StudentView view)
{
this.model = model;
this.view = view;
}
public void setStudentName(String name)
{
model.setName(name);
}
public String getStudentName()
{
return model.getName();
}
public void setStudentRollNo(String rollNo)
{
model.setRollNo(rollNo);
}
public String getStudentRollNo()
{
return model.getRollNo();
}
public void updateView()
{
view.printStudentDetails(model.getName(), model.getRollNo());
}
}
class MVCPattern
{
public static void main(String[] args)
{
Student model = retriveStudentFromDatabase();
StudentView view = new StudentView();
StudentController controller = new StudentController(model, view);
controller.updateView();
controller.setStudentName("Vikram Sharma");
controller.updateView();
}
private static Student retriveStudentFromDatabase()
{
Student student = new Student();
student.setName("Lokesh Sharma");
student.setRollNo("15UCS157");
return student;
}
}
输出:
Student:
Name: Lokesh Sharma
Roll No: 15UCS157
Student:
Name: Vikram Sharma
Roll No: 15UCS157
好处
- 多个开发人员可以同时处理模型、控制器和视图。
- MVC 支持对控制器上的相关操作进行逻辑分组。特定模型的视图也组合在一起。
- 模型可以有多个视图。
缺点
- 框架导航可能很复杂,因为它引入了新的抽象层并要求用户适应 MVC 的分解标准。
- 对多种技术的了解成为常态。使用 MVC 的开发人员需要精通多种技术。