首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVVM-light + RIA服务最佳实践

MVVM-light + RIA服务最佳实践
EN

Stack Overflow用户
提问于 2010-08-06 00:04:31
回答 1查看 3.5K关注 0票数 15

我想开始收集MVVM-light (带RIA服务)最佳实践。我发现有许多项目是有帮助的最佳实践或最佳方法,但我想听听其他使用MVVM-light工具包的人的意见,看看他们也发现了什么。

请将您的最佳实践作为此问题的答案发布。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-06 00:22:35

MVVM-Light的基本用法

通过BaseClass

  • Always在App.cs文件的Application_Startup

  • ViewModels中初始化DispatcherHelper创建ViewModelLocator类,该类包含所有视图模型并链接到应用程序资源

  • 使用RelayCommands将函数公开给视图

  • 了解何时使用and

清理思路:

在适当的情况下,将ViewModel定位器的Cleanup()?

  • Call ()函数添加到ViewModel中以清除
  1. 上的域上下文的EntitySet,以便在ViewModel中不再需要视图模型时清除视图模型

我很乐意听到其他人关于您何时/如何使用CleanUp函数的信息。随着应用程序的增长,我确实觉得需要添加一些清理功能,以便更好地管理客户端内存使用情况。

对于可混合性:

将服务/查询实现抽象为每个服务实现类的Interface.

  • Create 2个类(1个用于设计,1个用于Production)

  • Within您的每个ViewModel,实现其自己的服务类(使用IsInDesignMode)以创建可混合的服务实现,将DomainContext作为静态变量保存在服务实现类中。

  • 将DispatcherHelper.Initialize()添加到ViewModels的构造函数中,但仅当处于设计模式时。Blend在加载页面时不加载应用程序,这可以解决这个问题。

对于添加的业务逻辑:

  1. 首先在模型中添加业务逻辑,然后在ViewModel.
  2. Use中添加模型的分部方法,以便为相应的更改/更新事件添加逻辑。
  3. 添加只读属性(仅限getter)以提供模型的摘要和计算值。

对于视图:

  1. 始终将根绑定到定位器对象。
  2. 尝试将代码隐藏逻辑仅用于布局或自定义UI逻辑。避免引用您的ViewModel。

对于集合:

  1. 将CollectionViewSource用于ViewModels中的集合,并使用DomainContext's EntitySet
  2. Apply的源将所有筛选、排序和分组逻辑添加到ViewModel.
  3. After ServiceCalls中的ViewModels中,根据需要对CollectionViewSource对象调用.View.Refresh()以更新UI。

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

  1. 很少使用消息,太复杂的消息很难管理。
  2. 使用NotificationMessage和PropertyChangedMessage类进行发送/接收。

对于RIA DomainServices:

如果需要通过导航属性引用另一个实体,请先检查EntityStatus或从另一个上下文加载实体,以防止EntityStatus冲突。如果需要通过导航属性引用另一个实体,则

  1. 将在persist函数中实现任何日志记录,而不是update/ Insert /delete logic.
  2. During Insert、Update、Update和Delete函数。

用于调试/测试:

  1. 检查输出窗口中的绑定错误并修复它们。绑定错误会以静默方式向用户失败,但会降低应用程序性能和Silverlight中预期的behavior.
  2. Create单元测试,以验证任何添加的模型/业务逻辑
  3. Create单元测试项目,以测试服务器端逻辑和功能

对于实体框架:

  1. 保持EntitiesContext对域服务的一对一匹配。尝试以另一种方式拆分会出现问题。
  2. 不使用Composition属性,除非您完全打算花费大量时间仔细构建插入、更新和删除逻辑。
  3. 使用单独的服务将自定义类型返回给您的RIA。不要将它们添加到PersistChangeSet函数中的EntityFramework Object
  4. Perform服务器端更新/集成逻辑(如更新其他系统)的DomainService中,而不是添加到插入、更新和删除函数中。这将防止您通过导航属性意外引入实体,这将为您的分离版本non-updated.
  5. Create留下一个额外的上下文,以便在更新/集成逻辑期间查找当前值。
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3416714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档