MVC架构与三层架构的关系

1、基本概述

1.1、什么是架构

    首先,我们从架构层面大致可以分为:系统架构和应用架构。

    所谓的系统架构,也是我们通常所说的网络架构;而应用架构也就是我们所说的代码架构。

1.2、为什么需要架构

    以前系统简单,一个应用部署在一台服务器上,且大部分开发工作是CRUD,应用结构简单,且易于维护。随着系统业务复杂度越来越高,功能模块越来越庞大,耦合度也越来越高,导致系统的复杂度越来越不可控。

    为了更好的降低应用及模块间的耦合度,于是,诞生了一些我们熟知的网络架构(分布式微服务)和应用架构(三层架构、MVC架构,在此架构上又出现了一些框架,如SSM框架、SSH框架等,使用框架的好处就是结构清晰易于维护)。

2、MVC架构

2.1、什么是MVC架构

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

视图(view):为用户提供使用界面,与用户直接进行交互。

模型(model):代表一个存取数据的对象或 JAVA POJO(Plain Old Java Object,简单java对象)。它也可以带有逻辑,主要用于承载数据,并对用户提交请求进行计算的模块。模型分为两类,一类称为数据承载 Bean,一类称为业务处理Bean。所谓数据承载 Bean 是指实体类(如:User类),专门为用户承载业务数据的;而业务处理 Bean 则是指Service 或 Dao 对象, 专门用于处理用户提交请求的。

注:什么是Bean?官网定义

A Java Bean is a reusable software component that can be manipulated visually in a builder tool.”(一个Java Bean是一个可以在构建工具中可视化操作的可重用软件组件)

控制器(controller):用于将用户请求转发给相应的 Model 进行处理,并根据 Model 的计算结果向用户提供相应响应。它使视图与模型分离。

2.2、MVC架构工作流程

mvc和三层架构比较 mvc和三层架构的理解_架构

流程步骤:

    1)用户通过View 页面向服务端提出请求,可以是表单请求、超链接请求、AJAX 请求等;

    2)务端 Controller 控制器接收到请求后对请求进行解析,找到相应的Model,对用户请求进行处理Model 处理;

    3)将处理结果再交给 Controller(控制器其实只是起到了承上启下的作用);

    4)根据处理结果找到要作为向客户端发回的响应View 页面,页面经渲染后发送给客户端。

使用案例:

public class MVCDemo {
	public static void main(String[] args) {
		UserView view = new UserView();
		User model = new User("老张","男");
		UserController controller = new UserController(model, view);
		//首次读取到数据更新视图
		System.out.println("首次加载数据:"+controller.updateView());
		//更新模型(后台数据被更新)
		controller.setUserName("老王");
		//更新后输出到视图
		System.out.println("更新后数据:"+controller.updateView());
	}
}

/**
 *创建模型——数据类User
 */
class User{
	private String name;
	private String sex;
	
	public User(String name,String sex) {
		this.name = name;
		this.sex = sex;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}
/**
 *创建视图——UserView
 */
class UserView{
	public String showView(String name,String sex) {
		return "姓名:"+name+",性别:"+sex;
	}
}

class UserController{
	private User model;
	private UserView view;
	
	public UserController(User model,UserView view) {
		this.model = model;
		this.view = view;
	}
	public void setUserName(String name){
	    model.setName(name);    
	}
    public String getUserName(){
        return model.getName();   
    }
    
    public void setUserSex(String name){
	    model.setSex(name);    
	}
    public String getUserSex(){
        return model.getSex();   
    }
    public String updateView(){   
    	System.out.println("更新视图-------");
        return view.showView(model.getName(), model.getSex());
    }  
}

案例效果:

 

mvc和三层架构比较 mvc和三层架构的理解_mvc_02

    MCV模式最大的优势所在就是,将视图和模型分离,大大提高了代码的可重用性(多个视图可以共享一个模型)。  

3、三层架构

3.1、什么是三层架构

表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构

mvc和三层架构比较 mvc和三层架构的理解_三层架构_03

表示层(UI):位于三层构架的最上层,与用户直接接触,表示层就是实现用户的界面功能,也是系统数据的输入与输出,是为用户传达和反馈信息的。

业务逻辑层(BLL):是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理。同时也是表示层与数据层的桥梁,实现三层之间的数据连接和指令传达。

数据访问层(DAL):有时候也称为是持久层,主要功能是对原始数据(数据库或者文本文件等存放数据的形式)的操作(实现数据的增加、删除、修改、查询等)。具体为业务逻辑层或表示层提供数据服务。

3.2、三层架构设计思想

    在三层架构程序设计中,采用面向接口编程。各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体。

mvc和三层架构比较 mvc和三层架构的理解_三层架构_04

    层是一种弱耦合结构,层与层之间的依赖是向下的,上层对下层的调用,是通过接口实现的,而真正提供服务的是下层的接口实现类。服务标准接口是相同的,而实现类是可以替换的,这样就实现了层与层间的解耦。  

4、三层架构与MVC的区别

    无论是MVC架构还是三层架构,都是一种规范,都是奔着"高耦合,低内聚"的思想来设计的。

    MVC架构主要是为了解决应用程序用户界面的样式替换问题,把视图层尽可能的和业务代码分离。

    而三层架构是从整个应用程序架构的角度来分层的。当然,如果有需要的话,还可以分层。在三层架构中业务逻辑层和数据访问层要遵循面向接口编程。

mvc和三层架构比较 mvc和三层架构的理解_系统架构_05