MVVM的前世今生与在苹果开发中的应用

6 篇文章 0 订阅
3 篇文章 0 订阅

MVVM是微软于2005年开发出的一种软件架构设计模式,主要是为了在WPF和Sliverlight中更简单的对UI实现事件驱动编程。在WPF和Sliverlight中,通过MVVM成功的实现了UI布局和数据逻辑的剥离。虽然WPF和Sliverlight最后都没有推广开来,但是还是让大家看到了MVVM设计模式的优秀之处。
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。
MVC在苹果开发中M是数据,View是UIView,C是UIViewController。C在MVC占据支配作用,View加载,数据请求,数据再加工,业务逻辑几乎都集中在C中处理,造成胖UIViewController。一个控制器C甚至达到成千上万行,造成很难开发维护。这样的好处也有,代码集中不用新建很多累,对开发者实现方便(对后期其它维护者是噩梦)。有些人在采用MVC开发时喜欢采用对象拷贝方式,不是强应用方式。由于它结构简单,主要是UIViewController通过设置view的model来更新ui,所以问题不大。
为了解决胖C问题MVC是把一部分逻辑放在View中,虽然瘦身了C,但是C还是很大。为了彻底解决胖UIViewController问题,实现事件驱动编程,抽象出ViewModel。它具体做的是:请求参数校验,和后台进行交互,后台报错显示,对后台数据进行model转换,对后台返回的数据进行再加工以便于直接控制View的数据显示,根据后台结果进行逻辑处理(当然这个逻辑也可以放在c中写逻辑或实现状态机)。
Model是最单主要是数据模型定义, 也可能包含极少的数据再加工函数。
View主要通过setModel来实现数据显示,少数根据数据来区分显示UI。
UIViewController负责加载View,调用ViewModel对象向服务器发送请求,根据服务器的响应结果通过更新View的model来更新UI。
从这里可以看到ViewModel能实现原来MVC的UIViewController和View的绝对大多数功能,也可以重新让他们实现,用来达到他们三者的平衡,防止从胖UIViewController变成胖ViewModel。由于View,ViewModel,UIViewController三者共同持有Model,所以再使用对象拷贝Model会出现数据不一致,一般采用强引用方式三者共享一个大model,来实现三者的数据一致性。
看过这篇文章,若读者有一定的苹果开发经验应该明白mvvm解决了mvc的什么问题(解决胖UIViewController问题,事件驱动View),比它先进在哪里。当然任何事物都有两面性。分的越细,拆分的模块越多,写代码的速度越慢!但是好处也很显然就是能写出高性能,可维护性强的代码。正向很多人对组件化开发的存在的误解一样,认为组件化开发像堆积木一样,堆积起来比一层一层垒起来更快。软件开发是一个系统工程,其实开发组件本身比直接开发更费时间,组件不是直接把代码拷贝出来就是组件。组件要能独立运行,在修改组件时要兼容原来的场景和现在场景,考虑上下问。组件在减少了代码重复性和增加了代码复用性,能统一修改,也增加了抽象组件的时间,组件在使用的兼容性设计。在使用组件化开发不但不会提高开发速度,反而会大大减少开发速度。当产品稳定后,组件化才逐步提高它对对开发速度的提升和可维护性。
好的架构只是提高了软件的可能高度,最终还是看是哪一类程序员开发的。若是开发的既快又差的程序员开发,这不是好事,反而还不如mvc,毕竟越复杂的架构对开发者的素质和能力要求越高。
现在很多老板拼命压榨员工,有想用最新的架构,组件化开发,提高开发质量,又拼命压缩开发人员数和开发时间,制订出根本不可能按时完成的任务。开发人员只能拼命加班,经常996,晚上休息不好,第二天开发效率当然低了,造成恶性循环。这样就是优秀的程序员开发质量也会下降。老板为了经济利益这样拼命让员工加班,怕年龄大的程序猿身体吃不消,不好忽悠大龄程序猿,工资要求高,所以内部规定了程序猿的年龄不能超过35岁,以公司年轻化为荣(平均30岁以下)。这是又想马儿跑,又不想给马儿吃草思想。现在随着高考和研究生扩招,研究生大行其道的年代,正常毕业就25岁了,那么30岁以下工作不到五年。其实软件开发并不是都需要高学历,更需要逻辑思维能力强,不达目的不罢休的性格,独立解决问题的能力。再来看看美国等发达国家的程序猿,主力是30岁和40岁的程序猿。他们是喜欢程序猿这个职业而做程序猿,而我们是为了挣钱而做程序猿。我见到一个招聘信息要求应届毕业生掌握软件开发架构。这不是搞笑吗?三年之内的程序猿能帮你开发,质量不错,知其然不知其所以然,他已经是一个合格的程序猿了。一般的程序猿在无人指导下,野蛮开发环境下可能十年都不会知道架构的具体应用,知道问题本质的东西。我是从事开发10年后,接触到相关架构项目,不断自我总结才完善了架构和技术本质的东西。前五年我只知道开发,只抓住了些皮毛。五年后才处于懵懂状态。不得不承认,有的程序猿确实能力超强,运气很好,但是没有三年也很难真正掌握架构和技术本质的东西。能力强的五年能掌握还是有的。十年一般会知道的更多。 聪明的人用经验换取生命,不聪明人用生命换取经验 ,他们都将会成为将军。
公司招聘程序员是要他开发出高质量的软件,还是想高速度的开发软件,这个定位很重要。一般的外包公司接的外包项目强调开发速度,自己的项目最好要求开发高质量的软件。想前期开发高度开发,不断叠加功能,想后期优化改善质量。认为这样用的时间最短。实际上这样用的时间更长。一般的程序猿开发完成,心理抗拒推到重来。一个高度开发的程序猿基本上也变不成高质量的开发程序猿。个性决定结果。什么都想最好,最好什么都难达到,有舍才有得。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值