MVVM-light + RIA 服务最佳实践 [关闭]

2024-03-14

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

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


MVVM-Light 的基本用法

  1. 在App.cs文件Application_Startup函数中初始化Dispatcher Helper
  2. 从基类创建 ViewModel
  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. 在 ViewModel 的构造函数中添加 DispatcherHelper.Initialize(),但仅限在设计模式下。 Blend 在加载页面时不会加载 App,这可以解决这个问题。

对于添加的业务逻辑:

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

对于视图:

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

对于收藏:

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

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

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

对于 RIA 域服务:

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

用于调试/测试:

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

对于实体框架:

  1. 保持 EntitiesContext 与领域服务的一对一匹配。尝试以另一种方式拆分它会导致问题。
  2. 除非您完全打算花费大量时间仔细构建插入、更新和删除逻辑,否则不要使用 [Composition] 属性。
  3. 使用单独的服务将自定义类型返回给您的 RIA 客户端。不要将它们添加到 EntityFramework 对象的 DomainService 中
  4. 在 PersistChangeSet 函数中执行服务器端更新/集成逻辑(例如更新其他系统),而不是在 Insert、Update、Delete 函数中。这将防止您意外地通过导航属性拉入实体,这将使您的分离版本无法更新。
  5. 创建一个附加上下文以在更新/集成逻辑期间查找当前值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVVM-light + RIA 服务最佳实践 [关闭] 的相关文章

  • WP7 中的可滚动文本框(Skype 和 Facebook)

    基本上 我正在开发一个记笔记应用程序 用户可以随意输入 有点像WP7 中的可滚动文本框 https stackoverflow com questions 5576691 scrollable textbox in wp7 我将 TextB
  • MVVMLight——将参数传递给 ViewModel 构造函数?

    假设我有一个 ListBox 它绑定到一个集合Foo对象 以及选定的Foo显示在内容控件中 内容模板是FooView 有没有一种方法可以让我做到这一点FooView通过所选的Foo的构造函数FooViewModel这是它的数据上下文View
  • Ria 服务将复杂对象作为参数传递给查询域服务方法

    我在使用 WCF RIA 服务时遇到一些困难 类似于中指定的问题这个线程 https stackoverflow com questions 2330085 cant pass collection class as parameter t
  • 循环遍历 Silverlight DataGrid 中的行

    我有一种感觉 我在这里遗漏了一些明显的东西 但我找不到迭代 DataGrids DataGridRow 集合的方法 我有一个网格 其中包含我的班级集的集合的项目源 我试图迭代这些行并突出显示满足特定条件的任何行 但我一生都看不到如何实现 您
  • 从用户控件内部将选项卡添加到选项卡控件

    如何从选项卡本身包含的另一个用户控件将选项卡添加到一个用户控件中存在的选项卡控件 我可以在不将 tabcontrol 作为构造函数中的参数传递的情况下 也许通过某种静态全局方法 来完成此操作吗 我试过了 public static Obse
  • DomainService 可以返回单个自定义类型吗?

    我想要在我的域服务中使用类似于以下的方法 public SystemState GetSystemStatus return new SystemStatus InterestingStatusValue1 1223 OtherInters
  • Silverlight、RIA 服务、MVC2P2 = 无数据

    我在升级当前项目以使用 RIA 服务时遇到问题 我添加了所有必要的 web config 更改 但仍然没有运气 我一切都编译得很好 但是当我使用数据上下文点击页面时 我收到错误 我用 fiddler 进行了调试 并且在其中一个请求上收到了
  • 如何以编程方式访问 Silverlight FrameworkElement 的 ToolTipService?

    我们有一种语言机制 可以在加载 XAML 页面时递归遍历它们 检查每个元素的 Tag 属性 并使用其值来检索要应用于该元素的字符串资源 它目前不支持工具提示 我们必须在每个页面上都有特定的代码才能将语言资源应用于它们 我正在尝试将此功能添加
  • 添加新的 ApplicationBarMenuItem 图标时无法分配给属性

    我添加了一个新的ApplicationBarMenu带有图标的按钮到我的 wp7 项目中的页面 当尝试运行页面时我得到 无法分配给属性 Microsoft Phone Shell ApplicationBarIconButton Click
  • Windows Phone 7 可以实现 ping 吗?

    为了了解 WP7 中的网络功能 我将构建一个简单的 ping 应用程序 该应用程序将显示对某个主机的 ICMP ping 请求的结果 然而 不仅System Net NetworkInformation Ping班级不见了 System N
  • WPF/Silverlight 中的动画资源?

    我正在寻找一些好的资源来增强 WPF Silverlight 中使用的动画 故事板概念 有什么指点吗 发布的一个链接是 WPF 特定的 对于 Silverlight 这里还有一些其他资源 MSDN 动画概述 http msdn micros
  • 带有图像或路径的自定义滑块

    我的 WP7 应用程序中有一个滑块 我想重新设计它的样式 我的默认模板有问题 我做了类似的事情 但我无法将拇指 绑定 到该值
  • 在 Silverlight 中编辑并继续?

    Edit And Continue 是我最喜欢的调试工具之一 我之前曾在基于 C 的 Winforms 和 ASP NET 项目中使用过它 但是 我在 VS 2008 上运行 Silverlight 3 0 应用程序 每当我尝试进行更改 中
  • 我可以在运行时更改 Silverlight 浏览器外设置吗?

    我有一个代码库 可以在各种配置中安装 OOB SL5 应用程序 根据运行时的配置 由初始化参数选择 我想在执行安装之前更新 OOB 设置 标题 窗口标题 看来唯一的方法是在编译时通过 OutOfBrowserSettings xml 文件
  • ToggleButton 控件 VisualStateManager:处理多个悬停状态

    参考我之前的问题 Silverlight MVVM 困惑 基于状态更新图像 https stackoverflow com questions 5034189 silverlight mvvm confusion updating imag
  • 创建新视图时如何初始化视图模型中的属性?

    我有一个应用程序 可以打开一个视图 允许您搜索数据 然而 为了进行搜索 用户必须选择他想要在什么类别下进行搜索 目前 我正在尝试弄清楚如何将所选类别从主视图模型 作为 int 传递到新搜索视图的视图模型 目前我正在尝试在主视图中使用类似的东
  • 从 JavaScript 字符串保存文件而不访问服务器

    如果我在 JavaScript 中有一个内存字符串 例如 Excel 或 PDF 格式 并且我想弹出一个保存对话框以便用户可以将这些字节保存到文件中 我将如何执行此操作 我试图避免回到服务器 如果我要返回服务器 我可以在响应中发送正确的 H
  • 无效的跨线程访问问题

    我有两个 ViewModel 类 PersonViewModel 和 PersonSearchListViewModel PersonViewModel 实现的字段之一是通过 WCF 下载的个人资料图像 本地缓存在独立存储中 PersonS
  • 如何使用 MVVM-Light 和 WCF RIA 服务创建可混合项目

    我想使用 MVVM 模式构建我的业务应用程序 我选择 MVVM Light 因为它符合我的需求 在我见过的有关 MVVM Light 的每个示例中 没有人使用 WCF RIA 经典的 MIX10 示例在同一项目中使用服务 而 WCF RIA
  • 弹簧质量系统的阻尼效果(或者这是 ElasticEase?)

    我试图在代码中模拟动画效果 几乎任何语言都可以 因为它看起来是数学而不是语言 本质上 它是质量弹簧系统的仿真 我一直在研究 WPF Silverlight 的ElasticEase这似乎与我正在寻找的非常接近 但又不完全一样 首先 这就是我

随机推荐

  • 寻找序列中的零岛

    想象一下你有一个很长的序列 找到序列全为零的间隔 或更准确地说 序列下降到接近零值的间隔 的最有效方法是什么abs X
  • 将 Java Applet 迁移到什么/哪里?

    我目前正在审查一个中等规模的代码库 大约 30K LOC 它使用一个巨大的 Applet 并与其他系统交互 它是一个创建自定义标签的工具 因此我们需要拖放和其他相关的 UI 组件 鉴于代码库是 Java 语言 您将迁移到哪种技术 小程序 否
  • 使用 Selenium 登录页面可以工作 - 使用 BS4 进行解析可以工作 - 但不能同时使用两者

    从 Wordpress 论坛获取一些数据需要登录和解析 两个部分 两者作为独立部分都可以很好地工作 我可以使用 selenium 登录 完美 并且我可以使用 BS4 解析 抓取 数据 但是当我将这两个部分结合起来时 我遇到了会话问题 我无法
  • 了解 Scala 类型系统中的 Aux 模式

    这个问题之前可能被问过并回答过 但我想通过一个例子来理解这一点 但我无法推理出 Aux 模式可能有帮助的地方 所以这是特点 trait Foo A type B def value B 为什么我的类型与值函数的返回类型绑定 这样做我能取得什
  • IEnumerable.ToList() 的影响

    我只是想知道打电话时发生了什么 ToList on an IEnumerable在 C 中 这些项目实际上是否被复制到堆上全新的重复项目 或者新列表只是引用堆上的原始项目 我很想知道 因为有人告诉我调用 ToList 的成本很高 而如果只是
  • c openmp并行用于并行区域内

    我的问题是这样的one https stackoverflow com questions 11493265 for loop inside parallel region 但我想做一些不同的事情 例如 在我的并行区域内 我想在 4 个线程
  • Java:非静态嵌套类和instance.super()

    我很难理解 Java 中的非静态嵌套类 考虑以下示例 它先打印 Inner 然后打印 Child class Outer class Inner Inner System out println Inner public class Chi
  • 在 SQL Server 2005 中使用 TABLOCK 和 HOLDLOCK 提示是否会完全阻止插入直到事务结束?

    我需要检索 SQL Server 2005 生成的标识字段 通常我只使用 SCOPE IDENTITY 或向插入添加 OUTPUT CLAUSE 但是这些方法在这种情况下都没有帮助 因为表附加了 INSTEAD OF 触发器 接下来我考虑了
  • C++20 中概念的语法

    在这个问题中我们如何转换需求link https stackoverflow com questions 67133581 check if type has certain value types and the keyword valu
  • 如何管理扩展方法的名称空间?

    您是否为所有扩展方法使用全局的 包罗万象的命名空间 或者是否将扩展方法放在与其扩展的类相同的命名空间中 或者您是否使用其他方法 例如应用程序或特定于库的命名空间 我问是因为我需要延长System Security Principal IId
  • MaterialContainerTransform 转换在返回时不起作用

    我的 MaterialContainerTransform 转换是从源 gt 目标进行的 但反之则不然 我的情况非常标准 我试图提供从 RecyclerView 项目 源片段 到 详细信息 片段 目标片段 的简单转换 RecyclerVie
  • 完全合格的域名是否需要句点?

    我对 FQDN 完全合格域名 感到困惑 FQDN 是否需要以句点结尾 喜欢sun or sun tuc noao edu or sun tuc noao edu 有什么不同 IT 的工作原理 域名 系统 https technet micr
  • Android:IllegalArgumentException:无法找到包含/data/data/的配置根目录

    刚刚进入 Android 的 Glide 图像加载库 使用这里的代码 https github com bumptech glide issues 459 https github com bumptech glide issues 459
  • 有人可以向我解释一下 Flutter 中 Builder 类的作用吗?

    该文档非常混乱和模糊 它是这样说的 建造者类 一个柏拉图式的小部件 它调用闭包来获取其子小部件 这是我的问题 他们所说的 柏拉图式 是什么意思 他们所说的 关闭 是什么意思 这堂课的目的到底是什么 经过长时间在互联网上进行的大量令人费解的研
  • Web 服务请求身份验证

    我们真的被困在这里所以我决定寻求你的帮助 昨天 我被要求帮助使用 Web 服务 获取 WSDL 的 URL 以及要使用的用户凭据 我从未真正与 Web 服务有任何关系 但对它们有一个总体了解并看到了一些示例 我认为它不会那么糟糕 显然我错了
  • 使用 nvcc 编译给出“没有这样的文件或目录”

    我正在尝试在 Ubuntu 上使用 nvcc 编译 CUDA 代码 但是 当我这样做时 我得到以下输出 gt make usr local cuda bin nvcc m64 ptxas options v gencode arch com
  • “main.cpp”在 Qt 项目中的作用

    在Qt项目中我们通常会找到一个project pro文件 该main cpp和几个标题 源和 ui文件 包含为应用程序 项目注入生命和功能的所有资源 如果还有更多的话 按下按钮即可显示 你好 世界 可能存在用于存储数据和配置文件等的目录 我
  • 有人知道我可以嵌入 WPF 窗口或 Windows 窗体中的代码编辑器吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想创建自己的 IDE 但我想要一个代码编辑器 语法高亮 我想将它作为控件嵌入到 WPF 窗口中 Malcolm The 夏普开发IDE
  • 在更新语句中获取最新的行版本/时间戳值 - Sql Server

    我正在使用 rowversion 列来处理乐观并发 并希望在完成更新后获取新的 rowversion 值 以便我的数据层具有最新值 并且可以通过获取并发异常来执行另一次更新 除非记录有已被其他人更新 我只是在更新后进入数据层 但这不是很有效
  • MVVM-light + RIA 服务最佳实践 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi