【问题标题】:Using a WCF service as the model in a WPF application using the MVVM design pattern在使用 MVVM 设计模式的 WPF 应用程序中使用 WCF 服务作为模型
【发布时间】:2011-07-26 15:43:00
【问题描述】:

在使用 MVVM 编写 WPF 应用程序时,我想使用 WCF 服务,其上有方法来提供来自应用程序数据库的相关数据。

例如,如果我的系统有一个任务列表,它们将存储在 SQL 数据库中。我可以在 Web 服务上放置一个方法来从数据库中检索所有任务。

我可以从 ViewModel 调用这个方法并将结果存储在一个

public List<Task> Tasks { get; set; }

然后我会将 View 上的控件绑定到此属性。

当 Tasks 属性发生变化时,我已经准备好要更新的视图(我没有把它放在上面以保持示例简单)。

我的问题是,当其他人将新任务添加到数据库中时,如何更新 ViewModel 上的 Tasks 属性?

我是否需要每 x 分钟轮询一次数据库以查找新任务(通过 WCF 服务上的方法)?

或者,当任务被添加到数据库时,我能否以某种方式更新 Tasks 属性?

【问题讨论】:

    标签: .net sql wpf wcf mvvm


    【解决方案1】:

    您可以使用Publish Subscribe Framework for WCF Services 来实现这一点。这允许您的 WPF 应用程序订阅来自 WCF 服务器的更新。然后,当有新数据可用时,服务器将调用 WPF 应用程序提供的 WCF 服务。然后,您可以使用新数据更新您的视图模型。如果您的 WCF 服务还控制数据库的存储,那么您可以简单地捕获所做的更改,并向您订阅的 WPF 客户端发送通知。

    【讨论】:

      【解决方案2】:

      您需要执行某种轮询来完成这项工作。对 ViewModel 中的数据所做的更改会直接更新(通过您的绑定),因为所有更改都发生在 WPF 应用程序的内存中。但是,只有数据库知道对数据库的更改。

      您可能希望向 WCF 服务添加一个方法,该方法采用 DateTime,它将返回自给定时间以来添加的所有任务。然后,以对您的使用场景和预期数据更新率有意义的频率从您的 ViewModel 调用该方法。此时,添加的任何新闻任务都应反映在您的视图中。

      【讨论】:

        【解决方案3】:

        您可以使用CQRS approach,具体取决于应用。如果应用程序是简单的 CRUD,那么它可能不值得,但如果您正在构建更复杂的域模型或寻找显着的可扩展性,这可能值得研究。 CQRS 基本上将您的命令与查询分开。在您的场景中,您可能将实际的 ViewModel 存储在数据库中,客户端直接从那里获取它们,而无需通过 WCF。您还可以让您的客户订阅域事件,以使他们能够根据需要动态刷新。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-19
          • 2023-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多