wpf - 存储库设计模式指南

标签 wpf design-patterns mvvm

假设您有一个 MVVM客户关系管理应用程序。

您通过存储库在内存中有许多客户对象。

从 GUI 处理与传统 MVVM 任务无关的任务的合适位置是什么?

例如,假设每隔几分钟您想检查他们的地址是否有效,如果不是则弹出通知。或者您想发送每小时更新的电子邮件。或者您希望弹出一个窗口,提醒您在特定时间调用客户。

这个逻辑到哪里去了?我认为它不是面向 GUI/ Action 的,也不是适合存储库的逻辑。

最佳答案

我想你要问的是,“我的 MVVM 实现应该如何处理不是用户输入直接结果的 GUI 相关任务?” (如果我误解了你,请告诉我。)

您描述的任务很可能是由计时器协调的。如果您将计时器的滴答声设​​置为“用户操作”,那么它与传统的命令模型并没有真正的不同。

这意味着 View 模型将管理计时器并更新自身作为响应。它可以在应该向用户显示通知时设置一个属性,并且 View 可以响应该属性的更改并显示弹出窗口。重要的概念是 View 模型仍然负责协调行为, View 只是反射(reflect)了 View 模型的当前状态。

(每小时的电子邮件更新不是与 GUI 相关的任务,因为它不与用户交互;我没有考虑这个。)

至于实现定时行为的对象,@epitka 通过描述服务的概念一针见血。通常,服务跨多个存储库或其他服务协调行为。它们代表了不能分配给任何一个特定实体的领域特定逻辑。

关于wpf - 存储库设计模式指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5277545/

相关文章:

c# - 在 ListBoxItem DataTemplate - WPF 内的嵌套控件中处理相同的单击事件

c# - 将文件传输到目的地时取消文件传输

objective-c - 撤消如何工作?

java - 调度程序 View 模式和 MVC

wpf - 从 Catel WPF UserControl 中的 ResourceDictionary 中绑定(bind)

wpf - 如何使用 MVVM 创建定时弹出窗口?

wpf - 如何使用自定义模板文件导出数据

wpf - MVVM : Bind property in ViewModel to property in a different VM?

c# - 在使用 itemssource 时找出鼠标在 ListView 中的哪个项目

javascript - MVP设计模式中的业务逻辑在哪里?