WPF MVVM架构,模型和视图模型之间的最佳实践沟通是什么

时间:2016-02-11 10:51:10

标签: wpf mvvm architecture signalr

我们正在WPF中开发一个TODO列表类型的应用程序

1)当用户登录时,我们为用户加载工作项目列表(仅基本详细信息)

2)当用户打开特定的工作项时,我们从服务

加载所有信息

3)我们使用signalr在用户工作时为用户添加新的工作项(singalr will 发送工作站点,并在此基础上我们将获取基本详细信息并将其添加到工作项列表中。

每当用户编辑工作项时,如果他更改了工作项信息中的任何内容,我们应该将其移至UnSaved List,如果他还原它,我们需要将工作项移至打开列表

1)当用户在屏幕上输入内容时,它直接改变模型(letsay workitem模型有用户模型,用户模型有firstname,这个firstname绑定到文本框),如何通知这个变化 到viewmodel,以便viewmodel将此工作项移动到未保存的列表。

为了找出工作项是否脏,我们在每个工作项目中保留未更改的工作项详细信息,因此每当用户更改屏幕中的某些内容时,我们会对此未更改的工作项进行比较并将其移至未保存或打开的列表。

2)在每个工作项目中使用Unchanged workitem是否正确,是否有可用的最佳方法或模式?

3)如何区分用户改变工作项的某些值和系统改变工作项的值

假设A和B用户在编辑模式下看到相同的工作项,用户A在工作项中编辑了一些值 保存它,现在用户B将通过信号器通知接收此信息,我们将根据此工作点调用服务,并将填充B屏幕中的更改。现在我们不应该将工作项移动到未保存的列表,因为更改是由系统完成的。

4)此外,我们将收到许多与多个工作项有关的信号通知,但我们不会 想要在信号通知发出时进行多次服务调用,但是当用户点击工作项时,我们希望看到其他用户在该工作项中完成的更改。这样做的有效方法是什么? (我们不希望通知包含所有信息,我们只保留通知的ID和类型,以便信号器尽可能精益)

5)如何补偿singalr通知失败,(我们可以制作某种定时器,根据最后到达的notificationid定期轮询通知列表)。 这是一种很好的方法,还是存在这种问题的任何模式。

1 个答案:

答案 0 :(得分:1)

我不太确定我是否理解你的问题。 因此,我认为您正在考虑实时协作的软件。 有一些模式和算法如何以分布式方式解决这个问题。你应该寻找google wave协议的论文(google docs工具的实时编辑功能的基础)http://www.waveprotocol.org/whitepapers。或研究运营转型:https://operational-transformation.github.io/

好的想法是,已经存在处理此类协议并适应或扩展这些概念的库。

但是找到合适的库来处理信号灯的实时测量工作将是一个巨大的胜利。不知道是否还有一个建立在信号器之上的库 - 可能值得谷歌或bing会议。

但我认为在您将技术细节作为c#或mvvm讨论之前,了解分布式系统中实时协作通信的背景将是一个良好的开端。

就像我说的,我希望我的问题是正确的,因为你没有发布任何源代码,所以没有机会更精确......

HTH,引导您走向正确的方向。