设计模式-MVC模式
背景
记得当前通过serverlet来写jsp页面的时候有些代码还是通过后面直接写到页面来的,好恶心,什么东西都是通过后面来写的,包括静态代码,并且维护极其费时费力,真是辛酸岁月,好在后面mvc很好解决了该问题。
MVC模式是什么?
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
角色:
Model(模型):主要负责数据库操作,以及相关业务逻辑的实现,为视图层展示提供数据。
View(视图):主要负责系统与用户交互,以及数据的渲染;
Controller(控制器):用户请求的入口,接收和返回对应的数据模型。
优点:
结构清晰、方便维护:由于mvc各层有各层的职责所以很方便管理和维护,并且代码复用率也很高;
低耦合:各层之间互相分离,职责不同。
缺点:
mvc由于分层明确,实现起来相关的数据流转比较复杂。
MVC模式可以干嘛?
mvc主要是对java封装、继承、多态一种非常好的呈现,减少维护成本、各层职责清晰,并且管理方便,主要解决的问题将原来所有的逻辑都放到统一一个层级中,解耦成mvc三层各层分工明确。
个人理解:
mvc,比如我们手机看到的一些新闻,所看到的是视图层(view),而你所请求的网页地址就是入口(controller),通过后台模型层(model)返回了新闻信息。
MVC模式类图
源码下载:https://gitee.com/hong99/design-model/issues/I1IMES
实现代码
/**
* @Auther: csh
* @Date: 2020/6/23 14:53
* @Description:新闻信息 模型层
*/
public class NewsModel implements Serializable {
private String title;
private String text;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public NewsModel(String title, String text) {
this.title = title;
this.text = text;
}
}
/**
* @Auther: csh
* @Date: 2020/6/23 14:58
* @Description: 视图层(view)
*/
public class NewsView {
public void viewNews(NewsModel model){
System.out.println("新闻标题:"+model.getTitle());
System.out.println("新闻内容:"+model.getText());
}
}
/**
* @Auther: csh
* @Date: 2020/6/23 15:01
* @Description: 控制器(controller)
*/
public class ViewController {
private NewsModel model;
private NewsView view;
public ViewController(NewsModel model, NewsView view) {
this.model = model;
this.view = view;
}
public void viewNews(){
view.viewNews(model);
}
}
/**
* @Auther: csh
* @Date: 2020/6/23 15:02
* @Description: mvc 用户查看新闻
*/
public class Client {
public static void main(String[] args) {
NewsModel newsModel = new NewsModel("中央新闻","12456497894");
NewsModel newsMode2 = new NewsModel("中央新闻2","12456497894");
NewsView newsView = new NewsView();
NewsView newsView2 = new NewsView();
ViewController viewController = new ViewController(newsModel,newsView);
viewController.viewNews();
ViewController viewController2 = new ViewController(newsMode2,newsView2);
viewController2.viewNews();
}
}
结果
新闻标题:中央新闻
新闻内容:12456497894
新闻标题:中央新闻2
新闻内容:12456497894
源码下载:https://gitee.com/hong99/design-model/issues/I1IMES
最后
mvc设计模式和mvc框架是不同的,这个需要各位注意下,因为mvc设计模式只是一种思想,而mvc框架里面不单单用了这种思想,而在这种思想基础上去搭建框架。spring mvc 、structs都是mvc的设计思想衍生而来。mvc在真正工作中大部都是以该模式呈现,比如上面说的spring mvc、spring boot 、spring cloud等。
参考文章:
https://mp.weixin.qq.com/s/GuO5wdo2rJgvHH6mErLgqw
- 简单易学的机器学习算法——Label Propagation
- 利用Theano理解深度学习——Convolutional Neural Networks
- 持续精进——我的2017年终总结
- 实战 | Elasticsearch打造知识库检索系统
- Elasticsearch实战 | 必要的时候,还得空间换时间!
- 转--以io.Writer为例看go中的interface{}
- Go支持https协议的简单例子
- Elasticsearch索引增量统计及定时邮件实现
- 机器学习中的特征空间
- 简单易学的机器学习算法——马尔可夫链蒙特卡罗方法MCMC
- 推荐算法——基于图的推荐算法PersonalRank算法
- 推荐算法——非负矩阵分解(NMF)
- 【Go 语言社区】转-golang windows 判断锁屏
- 【Go 语言社区】单点redis 持久化在高并发下存在延迟情况
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 磁盘高可用解决方案(DBA).md
- Python 3.7 + HttpRunner 初探
- 数据库PostrageSQL-服务器配置(复制)
- 高可用服务解决方案(DBA).md
- dotnet 使用 Interlocked 实现一个无锁的快速无序仅写集合
- 利用Python将gff3转换成gtf格式
- 单细胞DoHeatmap画热图标签出界
- FastSpar | 用更快的 SparCC 进行微生物组相关性分析
- GO和KEGG富集倍数(Fold Enrichment)如何计算
- 监控域名HTTPS证书过期时间
- 使用hmmlearn分析股票数据
- Flink源码阅读之Checkpoint执行过程
- 一文了解Kudu的核心原理
- 回归问题的中的常用方法
- 深度优先搜索(DFS)两点之间的可行路径