MVC开发模式

最近要做Web开发,需要按照MVC模式进行,将其记录在此。本文中介绍的MVC模式,均以Web开发为例。

MVC的概念

全名为Model-View-Controller Pattern,是模型(model)-视图(view)-控制器(controller)的缩写。它是一种软件设计典范,将一个应用的代码按照业务逻辑、数据、界面显示分成三个逻辑部分,从而实现对程序结构解耦的目的。MVC主要?被应用于输入、处理和输出功能都在一个逻辑的图形化用户界面中的结构。

内容

model是指业务模型——数据库表中的数据结构

专注于对接数据的?每一个基本功能点的实现。以功能为划分标准,将程序中会用到所有功能,以高内聚、低耦合的开发要求,划归到各个类中。举例来说,实现getUserName()的功能,那么哪一个变量是该功能应返回的呢,是name1还是name2?由本部分决定。

自认包括开发代码package中的Entity包和Dao包,如下所示。

Entity包

用于存放数据库中数据的实体类,与数据库中的属性值应基本保持一致。负责实现——数据库中数据与程序中变量间对应关系的——set和get的方法。


public class User {
    /* 用户id */
    private Long id;
  
    /* 获取用户id */
    public Long getId() {
        return id;
    }
 
    /* 设置用户id */
    public void setId(Long id) {
        this.id = id;
    }
}
Dao包(data access object,数据访问层)

用于封装与数据库进行联络的一些任务,负责接收最终的 sql 语句,具体到对于某个表、某个实体的增删改查。

view是指用户界面——前端

专注于与数据接收、数据展示相关的UI功能实现,主要负责数据的可视化工作,比如输入、输出功能。

Page包

controller是指控制器——后端业务处理

负责view模块与model模块间读存关系的具体实现,而非业务逻辑,从而将mode层l和view层分离。比如,model层负责getUserName,但按照程序规划,获取用户名需要验证授权码,则control层的函数在调用model层的getUserName前,还要将核对授权码一同封装在内。controller同时作用于model和view,详细见下方示例。Model类和View类均提供调用接口,Controller类通过调用这些接口来获取数据并控制两者执行相应操作。在开发过程中,直接调用controller的方法即可,而不需要使用到model和view层。更简单的说,controller本身不输出任何东西、不做任何处理,只是接收请求并决定调用哪个模型来处理,然后再确定用哪个视图来显示返回的数据,即控制数据流向model对象,并在数据变化时更新view。

自认包括开发代码package中的Entity包和Dao包,如下所示。

Controller包

负责具体的业务模块流程的控制,在此层要调用service层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里进行,针对具体的业务流程,会有不同的控制器。这样不仅使具体的业务流程程序结构变得清晰,也大大减少了代码量。

Service包(业务层)

分为两个com.jeecg.demo.service和com.jeecg.demo.service.impl组成。

com.jeecg.demo.service

存放接口

com.jeecg.demo.service.impl

实现接口

示例

示例一

//model模块
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);
   }
}
//control模块,负责控制view模块与model模块间的读存逻辑,而非业务逻辑。
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());
   }  
}
//注意,本部分才是自己一开始理解的业务逻辑,与control模块的职责区分。
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;
   }
}

示例二

特点

耦合性低

由于运用MVC的应用程序的三个部件是相互独立,改变其中一个不会影响其它两个。这也使得开发人员分工明确,可维护性高

重用性高

由于运用MVC的应用程序的三个部件是相互独立,改变其中一个不会影响其它两个

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值