2012-03-20 40 views
1

我们正在开发一个使用GWTP(GWT 2.4)的新应用程序。GWTP模型改变事件

关于主持人式的设计方式有很多文章 - 每个组件的责任,他们之间的沟通 - 但是对模型组件的关注较少。

在我们的应用程序中,我们使用GWTP的动作并从服务器接收一些DTO,我们主要是在CRUD上进行操作。 我们有一些每个DTO的UI-Entity包装。这个UI-Entity包含所有需要的元数据以查看它(它具有什么属性,它们的显示名称等),并为所有属性提供set/get。

我们想知道如何传播模型更改事件。 正如我所看到的,有两种方法:

  1. UI-Entity引发事件。
  2. Action从服务器回调事件。

我认为,这两种方法之间的最大区别在于,第一个选项,使模型“活” - 如果用户在做变化,他们都反映在应用程序中,即使不会被发送到服务器。在第二种选择中,只有在服务器中实际更改数据时,应用程序才会知道数据更改的事件。

正如我所看到的那样 - 通常您需要两种方法,但我找不到支持第一种方法的示例:通常在考虑第一种方法时 - 它指出它比MVP更像MVC设计。

您认为如何? 有什么建议吗?

回答

0

对于第一种情况,你应该能够使用一个PropertyChangeEvent具有某种听众注册,通常,如果你有一个文本框,也将是对这一领域的属性更改侦听器,然后每当场地改变时,一些事件就会被开到公交车上。当然,你仍然需要从UI绑定到模型对象(我建议Gwittir,它很好地完成了所有这些)。

第二个问题是类似的,服务器通过你已有的任何方式进行回调,然后在总线上触发一个事件,说“字段有什么新值!!!”,并且在那指出各个领域(应注册并聆听)可以决定是否倾听该事件并做出适当反应。

因此,基本上,您的字段应该正在监听总线,并且每当模型更改时(无论是从服务器还是ui端),都应该有一条消息发送到总线,以便任何感兴趣的监听器都可以处理该更改。这将设计分解并处理两种情况,并简化了复杂的窗口小部件级别的交互。

我不认为这个设置以任何有意义的方式违反了MVP,成为一个最纯粹的(如我框架MVP),你可以让你的演示者听公交车,然后告诉视图改变,但对我来说,似乎就像一个毫无意义的抽象层,耦合和错误源,以及稍后的更多工作。

让我知道如果这是一个错误问题的答案,我会编辑,如果我不了解问题的微妙之处。