在Silverlight中请谨慎使用MVVM
在Silverlight中请谨慎使用MVVM
1.设计时的支持问题.
当VM中需要引用到webservice返回数据时,在VS的设计界面会出现如图bug,在设计时非常不方便。
2.导航问题.
无法在MVVM中实现导航,很多案例曲线救国,要么改用HyperlinkButton,要么通过加载第三方dll实现导航。
3.大量的代码.
1) Properties 可以这样理解View和ViewModel之间的关系,View中需要呈现多少特性,ViewModel就必须有多少个对应的Properties。这些Properties将与View绑定,而且在绑定这些Properties时必须小心,它们是没有智能感应的,就算写错了,也不会报错。
2) 同样要在ViewModel中实现大量的方法。在逻辑处理方面的代码量等同于传统模式中的后台代码量。
3) 为了处理某些特殊事件,还需要额外编码。
实际上MVVM中的代码量是要多于传统的后台编码方式。而且View中表现的信息越多,需要多写的代码量也就越多。毫无疑问会影响到项目进度。所以,有些地方能更巧妙,更方便解决问题的时候,请不要执着与某种模式,毕竟我们是为了完成产品,而不是为了完成模式。
4. 异步处理.
由于Silverlight和WPF不同,在Silverlight中大量的是异步操作,因此也必须谨慎处理。
在我的项目中,我们暂时只在Security这里运用了 MVVM,我们发现通过绑定方式可以很方便的将权限与业务逻辑分开。
比如,对某个按钮的isEnable状态,我们在业务逻辑中进行了控制。如果需要加入权限管理,传统的处理方式通常会通过增加标识等方法使得业务逻辑与权限控制能匹配起来,而继承ICommand的代理事件中的 CanExecute 方法很轻松就能将这两者分开。当然这只是很小的一个案例,MVVM在解耦UI和业务逻辑以及数据方面的作用是很大的。不过,还是开篇的那句话,在Silverlight中请谨慎使用MVVM。
以上纯属个人意见,若有不足还望指正。