移动App开发中的View解耦问题
2015-01-06 12:20
169 查看
了解老码农个人隐私,请看这里:http://www.koulianbing.com/?page_id=12
这几天在做给IOS代码降耦的事情,顺便唠叨几句开发中的View解耦问题。
首先,我们先定位一下View的角色:View应该只操心前/后景色,字体属性,布局特性,x/y/width/height等纯视觉属性。不应该操心数据加载、修改,事件响应等Model和Controller关心的事。当然,也包括自定义的View。
接下来讨论针对这个角色在实际开发中如何降低View部分耦合对整体架构的冲击。
1、View的初始化、属性设置应该有自己的Owner,不应该放到Controller中去。当然,这个工作可能由Android中的XML布局或IOS中的Xib来替代。Controller只负责拿到View的引用做后续的设置默认数据,安装Listener等操作就可以了。
2、数据提供和更新刷新,都应该由Controller触发,如果数据比较复杂,像列表、宫格等,应该添加Adapter层来做Model和View的解耦。
3、事件的触发应该通过Listener来实现View与Controller的解耦,不要把事件对应的逻辑直接写到View中去,那会影响View的重用性,使代码难于维护。
4、把屏幕适配的问题在View内部解决,不要在Controller中去做。比如Android中的XML中实现灵活布局,或者IOS中使用AutoLayout。
最后说一下实际操作。
Android中提供了XML布局其实变相做了强制解耦,使得我们使用过程中很少会在View中混杂其它代码,我们只需要注意当View的Model比较复杂时,增加Adapter层来解耦就可以了。
而IOS中由于历史原因普遍采用的代码生成View,会导致在Controller中生成View,设置View属性,以及在View中实现功能逻辑等MVC耦合的现象比较严重。鉴于Storyboard对Controller限制较多,这里建议在在大型IOS项目中,参照Android的方式,通过Xib提供View布局,并把View实例通过IBOutlet映射到Controller中,通过Controller加载数据并安装Listener。不要在Controller中出现操作View的视觉属性的代码。
补充于 2015.1.13
如果项目只支持IOS6及以上时,可以使用AutoLayout+Size Class的方式替代代码来完成所有布局。但要注意,使用VC直接加载Xib时不用考虑屏幕适配问题,但使用loadnibnamed加载View时,需要把加载出来的View的frame变成目标frame。
Size class的适配策略可以参考官方文档,虽然是8.0出来的,但可以向后兼容IOS6。
经过试验,autolayout能完成代码能实现的任意布局,如对齐、相对布局、installed自定义类,可以放心使用。
这几天在做给IOS代码降耦的事情,顺便唠叨几句开发中的View解耦问题。
首先,我们先定位一下View的角色:View应该只操心前/后景色,字体属性,布局特性,x/y/width/height等纯视觉属性。不应该操心数据加载、修改,事件响应等Model和Controller关心的事。当然,也包括自定义的View。
接下来讨论针对这个角色在实际开发中如何降低View部分耦合对整体架构的冲击。
1、View的初始化、属性设置应该有自己的Owner,不应该放到Controller中去。当然,这个工作可能由Android中的XML布局或IOS中的Xib来替代。Controller只负责拿到View的引用做后续的设置默认数据,安装Listener等操作就可以了。
2、数据提供和更新刷新,都应该由Controller触发,如果数据比较复杂,像列表、宫格等,应该添加Adapter层来做Model和View的解耦。
3、事件的触发应该通过Listener来实现View与Controller的解耦,不要把事件对应的逻辑直接写到View中去,那会影响View的重用性,使代码难于维护。
4、把屏幕适配的问题在View内部解决,不要在Controller中去做。比如Android中的XML中实现灵活布局,或者IOS中使用AutoLayout。
最后说一下实际操作。
Android中提供了XML布局其实变相做了强制解耦,使得我们使用过程中很少会在View中混杂其它代码,我们只需要注意当View的Model比较复杂时,增加Adapter层来解耦就可以了。
而IOS中由于历史原因普遍采用的代码生成View,会导致在Controller中生成View,设置View属性,以及在View中实现功能逻辑等MVC耦合的现象比较严重。鉴于Storyboard对Controller限制较多,这里建议在在大型IOS项目中,参照Android的方式,通过Xib提供View布局,并把View实例通过IBOutlet映射到Controller中,通过Controller加载数据并安装Listener。不要在Controller中出现操作View的视觉属性的代码。
补充于 2015.1.13
如果项目只支持IOS6及以上时,可以使用AutoLayout+Size Class的方式替代代码来完成所有布局。但要注意,使用VC直接加载Xib时不用考虑屏幕适配问题,但使用loadnibnamed加载View时,需要把加载出来的View的frame变成目标frame。
Size class的适配策略可以参考官方文档,虽然是8.0出来的,但可以向后兼容IOS6。
经过试验,autolayout能完成代码能实现的任意布局,如对齐、相对布局、installed自定义类,可以放心使用。
相关文章推荐
- 使用air进行移动app开发常见功能和问题(一)
- 移动app开发中多种设备尺寸适配问题
- 使用AIR进行移动APP开发常见功能和问题(上)
- [Phonegap+Sencha Touch] 移动开发70 cordova app中使用增强的webview
- 移动APP开发中遇到的问题(一):分享链接显示JSON格式数据
- 安卓和iOS移动APP开发设计应该考虑哪些问题
- 使用air进行移动app开发常见功能和问题(二)
- IOS移动app开发中多种设备尺寸适配问题
- 做移动APP开发,必需清楚这20个问题
- 移动app开发中多种设备尺寸适配问题
- 佛山APP外包公司:移动理财APP开发问题有待改进
- webapp开发webview缓存问题
- 使用AIR进行移动APP开发常见功能和问题(下)
- 使用air进行移动app开发常见功能和问题(二)
- 使用air进行移动app开发常见功能和问题(一)
- 移动开发:使用桌面chrome调试安卓设备上的chrome和cordova app(webview)
- APP开发小贴士---问题虽小,但是需要注重
- 【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)
- android开发中webview保存cookie问题的解决
- 【Android2D游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)