MVC 编程模式
MVC(Model View Controller 模型-视图-控制器)设计应用程序的模式:
- Model(模型)表示应用程序核心(比如数据库记录列表)。
- View(视图)显示数据(数据库记录)。
- Controller(控制器)处理输入(写入数据库记录)。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
实现
我们将创建一个作为模型的 Student 对象。StudentView 是一个把学生详细信息输出到控制台的视图类,StudentController 是负责存储数据到 Student 对象中的控制器类,并相应地更新视图 StudentView。
MVCPatternDemo,我们的演示类使用 StudentController 来演示 MVC 模式的用法。
C++实现
#include<iostream>
#include<string>
using namespace std;
//Model模型类Student
class Student
{
public:
Student() {};
~Student() {};
string getRollNo();
void setRollNo(string rollNo);
string getName();
void setName(string name);
private:
string rollno;
string name;
};
string Student::getRollNo()
{
return rollno;
}
void Student::setRollNo(string rollNo)
{
this->rollno = rollNo;
}
string Student::getName()
{
return name;
}
void Student::setName(string name)
{
this->name = name;
}
//视图View类StudentView
class StudentView
{
public:
StudentView() {};
~StudentView() {};
void printStudentDetails(string studentname, string studentrollno);
};
void StudentView::printStudentDetails(string studentname, string studentrollno)
{
cout << "Student: " << endl
<< "Name: " << studentname << endl
<< "roll No: " << studentrollno << endl;
}
//controller控制器类StudentController
class StudentController
{
public:
StudentController(Student model, StudentView view);
~StudentController() {};
void setStudentName(string name);
string getStudentName();
void setStudentRollNo(string rollno);
string getStudentRollNo();
void updateView();
private:
Student model;
StudentView view;
};
StudentController::StudentController(Student model, StudentView view)
{
this->model = model;
this->view = view;
}
void StudentController::setStudentName(string name)
{
this->model.setName(name);
}
string StudentController::getStudentName()
{
return this->model.getName();
}
void StudentController::setStudentRollNo(string rollno)
{
this->model.setRollNo(rollno);
}
string StudentController::getStudentRollNo()
{
return this->model.getRollNo();
}
void StudentController::updateView()
{
this->view.printStudentDetails(this->model.getName(), this->model.getRollNo());
}
int main()
{
Student model;
model.setName("Robert");
model.setRollNo("10");
StudentView view;
StudentController controller(model, view);
controller.updateView();
controller.setStudentName("John");
controller.updateView();
system("pause");
return 0;
}
JAVA 实现
步骤 1
创建模型。
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;
}
}
步骤 2
创建视图。
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);
}
}
步骤 3
创建控制器。
public 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());
}
}
步骤 4
使用 StudentController 方法来演示 MVC 设计模式的用法。
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;
}
}