mvc是最常见的软件架构之一,本文主要简单介绍下mvc和MVVM的架构的区别。
在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑。 MVC模型关注的是Model的不变,所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。
MVVM在概念上是真正将页面与数据逻辑分离的模式,它把数据绑定工作放到一个JS里去实现,而这个JS文件的主要功能是完成数据的绑定,即把model绑定到UI的元素上。
MVC:
模型(Model):是应用程序中用于处理应用程序数据逻辑的部分。
视图(View):用户界面,是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
控制器(Controller):是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
通常模型对象负责在数据库中存取数据。
各部分之间的通信方式如下:
1.View 传送指令到 Controller
2.Controller 完成业务逻辑后,要求 Model 改变状态
3.Model 将新的数据发送到 View,用户得到反馈
所有通信都是单向的。
。
优点
1.耦合性低
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
2.生命周期成本低
MVC使开发和维护用户接口的技术含量降低。
3.部署快
使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
4.可维护性高
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
缺点
1.没有明确的定义
完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。
2.不适合小型,中等规模的应用程序
花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
3.增加系统结构和实现的复杂性
对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
4.视图与控制器间的过于紧密的连接
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
5.视图对模型数据的低效率访问
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
MVC的大体实现步骤:
model:
.h文件:各种属性的添加,模型类方法。
.m文件:模型类方法的实现
view:
.h文件:UI连线,模型属性的添加。
.m文件:model的set方法的实现,目的是将model中的数据赋值给view。
controller:
1.数据请求的方法中,进行view中的类方法的调用,目的是将请求下来的字典,赋值给model,并将每个model放在数组中。
2.若是tableView,则在
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法中进行cell的set方法的调用。目的是model中的数据赋值给view。
MVVM:
MVVM 模式将 Controller 改名为 ViewModel,同时改变了通信方向。
MVVM模式是Model-View-ViewMode模式的简称。由视图(View)、视图模型(ViewModel)、模型(Model)三部分组成,结构如下图。通过这三部分实现UI逻辑、呈现逻辑和状态控制、数据与业务逻辑的分离。
视图(View)
视图负责界面和显示
视图模型主要包括界面逻辑和模型数据封装
Model与MVC模式一样,Model用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。
1. 各部分之间的通信,都是双向的。
2. View 与 Model 不发生联系,都通过 ViewModel 传递。
3. View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 ViewModel非常厚,所有逻辑都部署在那里。
4. 区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。
使用MVVM模式有几大好处:
1低耦合。View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
可重用性。可以把一些视图的逻辑放在ViewModel里面,让很多View重用这段视图逻辑。
独立开发。开发人员可以专注与业务逻辑和数据的开发(ViewModel)。设计人员可以专注于界面(View)的设计。
可测试性。可以针对ViewModel来对界面(View)进行测试
MVVM大体实现步骤:
model:
.h文件:只进行属性元素的添加
.m文件:不进行任何操作
view包括view和controller两部分
view部分:
.h文件:以model为参数的对象方法的他添加。
.m文件:对象方法的实现,目的是将model中的数据赋值给view
controller部分:对viewModel中的逻辑方法的调用。
viewModel:
.h文件:各种需要实现的逻辑方法的添加。
.m文件:逻辑方法的实现,并且需要在数据请求中将请求下来的数据赋值给model。