Wpf 存储库设计模式指南

Wpf 存储库设计模式指南,wpf,design-patterns,mvvm,Wpf,Design Patterns,Mvvm,假设您有一个CRM应用程序 通过存储库,内存中有许多客户对象 处理与GUI中的传统MVVM任务无关的任务的合适位置是什么 例如,假设每隔几分钟您要检查他们的地址是否有效,如果无效,则弹出通知。或者您希望每小时发送一次电子邮件更新。或者,您希望弹出一个窗口,提醒您在特定时间致电客户 这种逻辑在哪里?我认为,它不是面向GUI/操作的,也不是适用于存储库的逻辑。我认为您要问的是,“我的MVVM实现应该如何处理与GUI相关的任务,而这些任务不是用户输入的直接结果?”(如果我误解了您的意思,请告诉我。)

假设您有一个CRM应用程序

通过存储库,内存中有许多客户对象

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

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


这种逻辑在哪里?我认为,它不是面向GUI/操作的,也不是适用于存储库的逻辑。

我认为您要问的是,“我的MVVM实现应该如何处理与GUI相关的任务,而这些任务不是用户输入的直接结果?”(如果我误解了您的意思,请告诉我。)

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

这意味着视图模型将管理计时器并相应地更新自身。当通知应该显示给用户时,它可以设置一个属性,视图可以响应该属性中的更改并显示弹出窗口。重要的概念是,视图模型仍然负责协调行为,而视图只是反映视图模型的当前状态

(每小时一次的电子邮件更新并不是一项与GUI相关的任务,因为它不会与用户进行交互;我将这项任务排除在外。)


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

它们被称为“服务”,其中每一项都是服务,如ValidAddressCheckingService或CustomerCallEminingService或类似服务。将存储库注入到这些服务中,并在其中执行任何您想要的操作。酷,这就是我一直在寻找的。非常感谢。