浅谈iOS架构设计 (一)MVVM

·  阅读 339

我已经开发iOS好多年了,今天我也来说说我的iOS架构思路,以及我自己的架构,我采用的是MVVM的思路架构的。
何为架构

架构(Architecture):软件开发中的设计方案,
类与类之间的关系、模块与模块之间的关系、客户端与服务端的关系。

经常听到的架构名词:MVC、MVP、MVVM、VIPER、CDD、三层架构、四层架构等。

界面展示层:主要封装公共的组件、业务的UI等等。
业务逻辑层:根据各个业务而定。
数据持有层:业务的请求、数据存储等等。
基础架构层:用于封装网络请求、工具类。
第三方插件层:通过cocoapds管理第三方库,包括微信、支付宝、QQ,以及常用的第三方。

既然我是基于MVVM的思路来架构的,那MVVM到底是怎么来实现的呢?


MVVM的原理图

MVVM的通讯关系如下:
1.View与Model是不直接通讯的。
2.ViewController与Model是不直接通讯的。
3.View只与ViewController/View Model两者发生关系。
4.Model只与View Model通讯。

Model:业务逻辑处理、数据控制(本地数据、网络加载数据)。
View:显示用户可见得视图控件、与用户交互事件。
ViewModel:是组织生成和维护的视图数据层。在这一层发者对从后端获取的 Model 数据进行转换处理,做二次封装,以生成符合 View 层使用预期的视图数据模型。
ViewController:界面的生命周期控制和业务间切换控制。

MVVM的优点
低耦合:view可以独立于model变化和修改,一个viewModel可以绑定到不同的view上
可重用性:可以把一些视图逻辑放在一个
独立开发:开发人员可以专注于业务逻辑和数据开发viewModel,设计人员可以专注于页面设计
可测试,可以针对于viewModel来测试

MVVM的缺点
bug变得难以调试,当遇到了异常,可能是view的问题,也有可能是model的问题。数据绑定使得bug快速传递到其他地方,要定为原始出问题的地方就变得不那么容易了。
对数据转化需要花费更多的内存。主要来自于对数组内,item又再次包含数组。多次嵌套的类型。需要多次转化才能用来view显示。
对于api返回的数据类型标准化要求较高,提高modelview的复用率,否则容易出现类型爆炸,加大了维护成本。




分类:
iOS
标签:
分类:
iOS
标签: