加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – MVVM:Thin ViewModels和Rich Models

发布时间:2020-12-15 17:43:09 所属栏目:百科 来源:网络整理
导读:我正在继续努力与MVVM模式,并尝试为一个中小型项目创建一个实用的设计,遇到了一些挑战.其中一个挑战是找出如何通过这种模式获得解耦的好处,而不会产生大量的重复性,难以维护的代码. 我目前的策略是创建“丰富”模型类.他们充分意识到,它们将被MVVM模式消耗,
我正在继续努力与MVVM模式,并尝试为一个中小型项目创建一个实用的设计,遇到了一些挑战.其中一个挑战是找出如何通过这种模式获得解耦的好处,而不会产生大量的重复性,难以维护的代码.

我目前的策略是创建“丰富”模型类.他们充分意识到,它们将被MVVM模式消耗,并实现INotifyPropertyChanged,允许观察它们的集合,并保持认识到它们可能总是被观察.我的ViewModel类往往很薄,只有当数据实际需要转换时,才会显示属性,其大部分代码是RelayCommand处理程序.视图可以直接绑定到ViewModels或Model,具体取决于是否需要任何数据转换.我使用AOP(通过Postsharp)来缓解INotifyPropertyChanged的痛苦,这样可以轻松地使我所有的Model类“丰富”.

使用这种方法有很大的缺点吗?我可以假设ViewModel和View如此紧密地耦合,如果我需要View的新数据转换,我可以根据需要简单地将其添加到ViewModel中?

解决方法

我认为您的模型上的INotifyPropertyChanged仅在您期望由VM和外部“力量”同时操作时才有用.

我个人是POCO车型的支持者.将任何框架特定的脚手架放在我的模型中会使我担心.当您将事件放入模型类时,您必须仔细考虑模型的生命周期,序列化,存储等方面的可能问题.例如,如果从数据源重新创建对象并且旧的INotifyPropertyChanged订阅现在无效,会发生什么?

对于ObservableCollection来说,类似的更好的地方在VM中,它可以使用IEnumerable数据源,并只向所选视图或临时过滤的项目提供视图.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读