深入理解MVC架构

一、前言

面试题刷到MVC和MVVM,MVC听说过,想总结一下却发现知道的只是皮毛,因此找了几篇文章深入理解一下MVC

二、对MVC的误解

引用知乎中的一段话

MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性、可移植性,代码的可重用性。

在东方电子实习就发现了这个问题,看他们的代码业务大多数写在控制层,这完全违背了MVC的架构方式,本身MVC设计出来是为了 解耦可复用 ,将业务写在控制层虽然功能都能实现,但是如果后来有一个类似的功能,在写一遍相似代码肯定效率上就不如将代码写在业务层,然后复用业务层

三、MVC

MVC说的更贴切一点是一种软件架构方式,其中包含着三种设计模式,分别是组合模式,策略模式和观察者模式

image.png

以下内容引自知乎

MVC中的组合模式

组合模式只在视图层活动, 视图层的实现用的就是组合模式,当然,这里指的实现是底层的实现,是由编程框架厂商做的事情,用不着普通程序员插手。
然而,观察者模式和策略模式就显得比较重要,是实实在在MVC中接触的到的部分。

观察者模式

观察者模式有两部分组成,被观察的对象和观察者,观察者也被称为监听者。对应到MVC中,Model是被观察的对象,View是观察者,Model层一旦发生变化,View层即被通知更新。View层和Model层互相之间是持有引用的

看过阮一峰的一篇关于MVC,MVP和MVVM比较的文章,引用了一个不太严谨的MVC通信图
在这个通信图中,View和Mode是单向通信,违背了MVC中的View和Model的双向通信

image.png

我们在开发Web MVC程序时,因为视图层的html和Model层的业务逻辑之间隔了一个http,所以不能显示的进行关联,但是他们观察者和收听者的关系却没有改变。
当View通过http提交数据给服务器,服务器上的Model接受到数据执行某些操作,再通过http响应将结果回送给View,View(浏览器)接受到数据更新界面,这不正是一个接受到通知并执行更新的行为吗,是观察者模式的另一种表现形式。

策略模式

最后是策略模式。策略模式是View和Controller之间的关系,Controller是View的一个策略,Controller对于View是可替换的, View和Controller的关系是一对多,在实际的开发场景中,也经常会碰到一个View被多个Controller引用,这即使策咯模式的一种体现,只是不那么直观而已。

四、总结

View层,单独实现了组合模式
Model层和View层,实现了观察者模式
View层和Controller层,实现了策咯模式

对应web开发中应该薄Controller,厚业务层,也就是Model

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值