iOS下的MVVM设计模式
MVVM是微软首先提出来的一种设计模式。在开发过程中随着代码量越来越多,维护的时候,暴露出来的问题也越来越多。这些问题中就包括UI和业务逻辑的高耦合,这会导致UI和业务逻辑很难进行单独修改,很难进行复用,很难进行单元测试。所以今天的主角MVVM设计模式就被创建出来了。
MVVM设计模式主要目标
将代码按职责进行分组。高耦合、难修改、脆弱的代码在维护期间会引起很多问题。最终会影响产品的交付质量。把UI和业务逻辑分开,使得代码容易测试,维护,和升级。同时能使的UI和业务逻辑更容易被复用。
让开发人员和设计人员并行工作。设计人员聚焦在产品的UI显示和布局上面。开发人员专注于业务,和数据逻辑处理上面。从而提高开发效率。
易于进行单元测试。将UI逻辑隔离起来,使得单元测试更容易进行。可以在测UI逻辑的时候不必运行程序。
MVVM设计模式
每一位iOS开发者,用的最多、最熟悉的设计模式估计就是MVC设计模式了。因为苹果为我们提供的框架就是使用MVC设计模式的。MVVM设计模式其实有很多概念和MVC很相似。
MVVM设计模式有三部分组成:View,View Model,Model。每一部分有自已的职责。下图是描述的它们之间的关系。
这三部分之间相互解耦,因此:
- 每个部分能被单独替换
- 修改内部的实现,不会影响别的部分
- 每个部分能独立工作
- 可以对每一部分进行单元测试
另外,为了更好的理解这三部分的职责,需要理解它们之间是如何进行交互的。从高层次上看,View“知道”View Model,而View Model并不“知道”View;View Model “知道” Model,而Model并不“知道”View Model。
View Model将View和Model隔离开来,使得Model,和View能单独进行修改。
View
View负责定义页面结构,布局用户在屏幕上看到的界面。在iOS开发中,View一般是程序中的一个页面。一个View也可以是父View的一部分。
每个View都有自己的View Model,或者它从父View中继承了View Model。View通常是通过通过View Model的绑定,或者调用View Model中的方法来获取数据。在运行的时候,UI控件要响应View Model抛出通知事件,来更新UI。
为了响应UI上的交互,需要在View Model中实现相应的代码。比如一个按钮被点击。需要将这个按钮点击事件绑定到View Model中去。然后在View Model中写代码处理用户的交互。
在iOS开发中View和ViewController都是属于View这部分。
Model
与业务和验证逻辑有关的域模型,都可以认为是MVVM中的Model。比如:业务对象,数据传输对象(DTOs),实体,代理对象等等都可以认为是Model。这里的Model与MVC中的Model一样。
View Model
View Model扮演着View和Model的中介角色,它负责处理视图逻辑和数据转化。一般来说View Model通过调用Model的方法来和Model进行交互。View Model随后将从Model中获取的数据以一种view容易使用的格式提供给View。View Model负责UI交互的响应代码实现。例如:当用户点击了一个按钮在UI中,这个动作会使得View Model中相应代码被执行。View Model也负责控制视图的显示逻辑,比如修改UI指示操作正在进行。
MVVM好处
- 在开发过程中,开发人员和设计人员能并行的工作。设计师能专注于界面,而开发人员能专注于业务逻辑和数据逻辑。有效提高开发效率。
- 开发人员能View Model和Modle创建单元测试。对View Model进行单元测试的效果就像对View进行单元测试一样。但是测试的时候并不需要运行程序。
- 修改UI代码而不必去碰其他代码。
- 对于包含了业务逻辑的Model,修改的话风险较大,此时可以将View Model当作适配器来使用,从而避免对Model代码做大的修改。
转载自:iOS下的MVVM设计模式
最后编辑时间为: November 12th , 2016 at 06:22 am
本文由 99ios 创作,转载请注明出处