MVVM-light + RIA服务最佳做法 [英] MVVM-light + RIA Services best practices

查看:81
本文介绍了MVVM-light + RIA服务最佳做法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想开始收集MVVM-light(带有RIA服务)最佳实践.我发现有很多项目是有用的最佳实践或最佳方法,但是希望听到使用MVVM-light工具包的其他人的意见,并看看他们的发现.

I would like to start a collection of MVVM-light (w/ RIA Services) Best Practices. There are a number of items I have found to be helpful best practices or best approaches, but would like to hear from others using the MVVM-light toolkit and see what they have found as well.

请发布您的最佳做法作为此问题的答案.

Please post your best practices as answers to this question.

推荐答案

MVVM-Light的基本用法

Basic Usage of MVVM-Light

  1. 在App.cs文件的Application_Startup函数中初始化DispatcherHelper
  2. 从BaseClass创建ViewModels
  3. 始终创建一个ViewModelLocator类,该类包含您的所有视图模型,并在您的应用程序资源中链接
  4. 使用RelayCommands将功能公开给您的视图
  5. 了解何时使用DispatchHelper.

清理思路:

  1. 适当时,添加到ViewModel上以清除Cleanup()上DomainContext的EntitySet吗?
  2. 当视图模型在应用程序中不再需要时,调用ViewModelLocator的CleanupSomeVM()函数来清除视图模型.

我很想听听其他人何时/如何使用CleanUp功能.随着应用程序的增长,我确实需要添加一些清理功能以更好地管理客户端内存使用情况.

对于可混合性:

  1. 将服务/查询实现抽象到接口.
  2. 为每个服务实现类创建2个类(用于设计的1个,用于生产的1个)
  3. 在每个ViewModel中,实现自己的服务类(使用IsInDesignMode)以根据需要创建Blendable Service实现.
  4. 使用静态变量将您的DomainContext保留在服务实例类中.
  5. 在ViewModels的构造函数中添加DispatcherHelper.Initialize(),但仅当处于设计模式"下​​时. Blend不会在加载页面时加载App,这可以解决此问题.

对于添加的业务逻辑:

  1. 首先在模型中添加业务逻辑,然后在ViewModel中添加.
  2. 使用模型的部分方法为适当的更改/更新事件添加逻辑.
  3. 添加只读属性(仅getter)以在模型上提供汇总值和计算值.

对于视图:

  1. 始终将根绑定到Locator对象.
  2. 尝试将代码隐藏逻辑仅保留在布局或自定义UI逻辑中.避免引用您的ViewModel.

对于收藏集:

  1. 将CollectionViewSource用于ViewModel中的集合,并带有DomainContext的EntitySet的源
  2. 将所有筛选,排序和分组逻辑应用于ViewModel中的CollectionViewSource.
  3. 在ServiceCalls之后,根据需要在CollectionViewSource对象上调用.View.Refresh()以更新UI.

用于ViewModel协调(控制器逻辑)

For ViewModel coordination (Controller Logic)

  1. 谨慎使用消息,可能很难管理太多复杂性.
  2. 使用NotificationMessage和PropertyChangedMessage类进行发送/接收.

对于RIA DomainServices:

For RIA DomainServices:

  1. 在持久更改功能中执行任何日志记录,而不是更新/插入/删除逻辑.
  2. 在插入,更新,删除功能期间,如果需要通过导航属性引用另一个实体,请先检查EntityStatus,或者从另一个上下文加载该实体,以防止EntityStatus冲突.

用于调试/测试:

  1. 检查输出"窗口中的装订错误并进行修复.绑定错误对用户无声失败,但会降低应用程序性能和预期行为.
  2. 在Silverlight中创建单元测试以验证任何添加的模型/业务逻辑
  3. 创建单元测试项目以测试服务器端逻辑和功能

对于实体框架:

  1. 保持EntitiesContext与域服务的一对一匹配.尝试以其他方式拆分会导致问题.
  2. 除非您完全打算花费大量时间仔细构建插入",更新"和删除"逻辑,否则请不要使用[Composition]属性.
  3. 使用单独的服务将自定义类型提供回RIA客户端.不要将它们添加到EntityFramework对象的DomainService中.
  4. 在PersistChangeSet函数中而不是在Insert,Update,Delete函数中执行服务器端更新/集成逻辑(例如,更新其他系统).这将防止您通过导航属性意外拉入实体,这将使分离的版本保持未更新状态.
  5. 创建一个附加上下文,以在更新/集成逻辑期间查找当前值.

这篇关于MVVM-light + RIA服务最佳做法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆