假设您有一个 MVVM客户关系管理应用程序。
您通过存储库在内存中有许多客户对象。
从 GUI 处理与传统 MVVM 任务无关的任务的合适位置是什么?
例如,假设每隔几分钟您想检查他们的地址是否有效,如果不是则弹出通知。或者您想发送每小时更新的电子邮件。或者您希望弹出一个窗口,提醒您在特定时间调用客户。
这个逻辑到哪里去了?我认为它不是面向 GUI/ Action 的,也不是适合存储库的逻辑。
最佳答案
我想你要问的是,“我的 MVVM 实现应该如何处理不是用户输入直接结果的 GUI 相关任务?” (如果我误解了你,请告诉我。)
您描述的任务很可能是由计时器协调的。如果您将计时器的滴答声设置为“用户操作”,那么它与传统的命令模型并没有真正的不同。
这意味着 View 模型将管理计时器并更新自身作为响应。它可以在应该向用户显示通知时设置一个属性,并且 View 可以响应该属性的更改并显示弹出窗口。重要的概念是 View 模型仍然负责协调行为, View 只是反射(reflect)了 View 模型的当前状态。
(每小时的电子邮件更新不是与 GUI 相关的任务,因为它不与用户交互;我没有考虑这个。)
至于实现定时行为的对象,@epitka 通过描述服务的概念一针见血。通常,服务跨多个存储库或其他服务协调行为。它们代表了不能分配给任何一个特定实体的领域特定逻辑。
关于wpf - 存储库设计模式指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5277545/