关于MVC设计模式耦合度与解耦相关技术点总结

原创 2016年06月01日 10:51:06

一 摘要

在深入探究MVC设计模式之前,首先要弄清这样几个问题

1.什么是MVC设计模

2.为什么要使用MVC设计模

3.MVC设计模存在的问题

4.什么是耦合性

5.如何去解耦

针对这些问题,我们来一一分析,解释.

1.什么是MVC设计模

这里写图片描述

首先我们来看一下MVC设计模式的整个架构图
这个图,应该都不陌生了,现在简单的介绍下各个模块的职能.

MVC-----Model-View-Controller
MVVM –>M:Model 模型
V: View 视图
C: Controller 控制器

model:持有我们应用的数据,和定义怎么操控他。在你的应用里面就是Album 这个类

View:处理用户的操作和展示model,都是UIView的子类。在应用里面是AlbumView类

Controller:他的作用主要是用来协调View和model把数据展示到View上,就是应用的Viewcontroller类

 Model-View-Controller是一个用来组织代码的权威范式。Apple甚至是这么说的。在MVC下,所有的对象被归类为一个model,一个view,或一个controller。Model持有数据,View显示与用户交互的界面,而view controller调解model和view之间的交互。

2.为什么要使用MVC设计模

主要有两个方面原因:

第一: 一种比较常用的设计模式,能够做到各层专注于各自的功能,易于扩展、管理等。
第二:  MVC使前后台相互分离,双方通过控制器来进行控制,且相互之间不影响。这样在编程的时候,前台可以安心做前台,后台可以专注于功能。且修改的时候非常容易。

3.MVC设计模存在的问题

1、增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。 
2、视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。 
3、视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。 
4、耦合性度比较高,目前,一般高级的界面工具或构造器不支持模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成MVC使用的困难。

下面来具体讲讲耦合性问题.

4.什么是耦合性

下面是官方解释:

耦合度(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。

模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。

降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身”的水波效应,保证系统设计顺利进行。

MVC的本意是要分离模型和视图的耦合性,但是这种相关性确以一种隐式的方式(从系统详细设计阶段就开始了)引入了耦合性。

5.如何去解耦

1.尽可能保持模块功能的独立性
2.引入更好的框架,例如MVVM设计框架
3.尽可能细化职责划分,这样也可以做到解耦
版权声明:本文为博主原创文章,未经博主允许不得转载。

换个角度看MVC中的耦合性

换个角度看MVC中的耦合性在MVC模式的主动通知中有两种通知方案:1,模型仅仅是通知视图,模型发生了改变,至于具体发生了哪些改变并没有告诉视图,需要视图在得到通知后,根据自己的兴趣点去主动查询模型中的...
  • swnuwangyun
  • swnuwangyun
  • 2005年11月01日 17:43
  • 1305

JavaWeb学习篇——使用通用工厂类解耦MVC框架

本文主要介绍如何通过定义一个通用工厂类来实现MVC框架开发中各层间的解耦。 package com.empiresteven.factory; import java.io.FileNotFound...
  • empiresteven
  • empiresteven
  • 2015年11月09日 19:47
  • 1150

码农小汪-SPringMVC-基本的理解MVC 降低耦合性~依赖性

标准 MVC 模型概述MVC模型:是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分离、流程控制逻辑、业务逻辑调用与展示逻辑分离 Model(模型): 数据...
  • u012881904
  • u012881904
  • 2016年05月01日 19:34
  • 7740

从解耦谈设计模式

简介:    解耦其实软件设计中永恒不变的话题。“部分”设计模式诞生的原因就是为了解耦。如代理模式,工厂模式,监听者模式等。探寻设计模式的本质其实就是探寻软件解耦。  简单例子说明之:下面是...
  • shenfumin
  • shenfumin
  • 2014年01月10日 15:32
  • 2085

C++多重继承 实现解耦,mvc分离

以前刚开始学习C++时候,觉得多重继承完全没有必要。伤脑筋,处理不好。最后1个类会继承N多父亲类处理。 晚上看django资料时候。发现django的cbv(class base view)是使用多...
  • watsy
  • watsy
  • 2013年08月23日 11:26
  • 1869

iOS 代码解耦利器(一)

最近写demo的过程中需要通过tableView的cell跳转到多个页面,当时偷懒不想去引用头文件了,灵光一闪,写了一个跳转的方法,后来自己有完善了一下,基本满足了不带参数的页面跳转,带参数的页面跳转...
  • HHL110120
  • HHL110120
  • 2016年10月28日 12:18
  • 971

使用第三方框架解耦的一种思路—简单工厂模式的运用

原创 2017-01-19 gdutxiaoxu 何俊林 前言: 能在平时的coding中,使用到设计模式,是一件非常细节的事,但恰恰也是走向高阶的开端,同样一段代码,不同的人写,水...
  • Android_hv
  • Android_hv
  • 2017年01月19日 16:23
  • 405

JAVA_WEB Struts2学习:Struts2解耦、耦合方式获取request、session、aplication对象

Struts: -OGNL与Servlet的最大区别:数据转移以及类型转化。 xwork-conversion.properties 处理类型转换错误(如果前台校验js很完善:等前台录入数据格...
  • dragonbamboo261
  • dragonbamboo261
  • 2013年08月25日 15:25
  • 1953

iOS架构模式-揭秘MVC,MVP,MVVM和VIPER

iOS架构模式揭秘MVC,MVP,MVVM和VIPER在IOS中使用MVC感觉很奇怪?对切换到MVVM存在疑虑?听过VIPER,但是又不确定是否值得尝试?继续阅读,你会找到上面问题的答案,如果没有你想...
  • cuibo1123
  • cuibo1123
  • 2016年02月17日 17:35
  • 3761

数据库耦合-解耦

随着业务越来越复杂,数据量越来越大,并发量越来越大,数据库的性能越来越低。好不容易找运维申请了两台机器,让DBA部署了几个实例,想把一些业务库拆分出来,却发现拆不出来,扩不了容,尴尬!   ...
  • admin1973
  • admin1973
  • 2017年11月29日 09:19
  • 146
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于MVC设计模式耦合度与解耦相关技术点总结
举报原因:
原因补充:

(最多只允许输入30个字)