
上图是mvc的数据流动图。M通知view展示数据的方式可以多种多样,直接notify通知view;也可以将数据先交给c,然后通过c转交给v都是可以的。iOS一般是通过将数据先交给c,然后通过c转交给v(为什么不用第一种,在另一篇文章去写)

上图是持有关系图。
mvc的可能出现的问题:
1、如果v不持有m,那么一大堆赋值、model转为可以显示的数据格式就写在了c层。view的嵌套会使赋值代码大大增加,c层会变得臃肿
2、如果v持有m,那么
1)v耦合了m,不方便对view的单元测试和复用
2)model转为可以显示的数据格式弱业务如果写在了v层,同样不方便v层的测试
3、如果model转为可以显示的数据格式弱业务写在了c层。
弱业务重复出现的频率要大于强业务,对复用性的要求更高,如果这部分业务写在Controller,类似的代码会洒得到处都是,一旦弱业务有修改(弱业务修改频率低不代表就没有修改),这个事情就是一个灾难
4、如果model转为可以显示的数据格式弱业务写在m层
如果塞到Model里面去,改一处很多地方就能跟着改,就能避免这场灾难。然而其缺点就在于,胖Model相对比较难移植,虽然只是包含弱业务,但好歹也是业务,迁移的时候很容易拔出萝卜带出泥
网友评论