我们正在使用GWTP(GWT 2.4)开发一个新的应用程序。
有很多关于演示者视图设计方式的文章 - 每个组件的职责,它们之间的沟通 - 但是对模型组件的关注较少。
在我们的应用程序中,我们使用GWTP的Actions并从服务器接收一些DTO,我们主要做CRUD。 我们有一些每个DTO的UI-Entity包装器。此UI-Entity包含查看它所需的所有元数据(它具有哪些属性,显示名称等),并为所有属性提供set / get。
我们想知道如何传播模型更改的事件。 我认为,有两种方法:
我认为两种方法之间的最大区别在于第一个选项使模型“生效” - 如果用户正在进行更改,即使未发送到服务器,它们也会反映在应用程序中。在第二个选项中,只有在服务器中实际更改了数据时,应用程序才会知道数据已更改事件。
正如我所看到的 - 通常你需要两种方法,但我找不到支持第一种方法的例子:通常在考虑第一种方法时 - 它表明它更像是MVC设计而不是MVP。
你怎么看? 有什么建议吗?本
答案 0 :(得分:0)
对于第一种情况,您应该能够使用propertychangeevent注册某种类型的侦听器,通常,如果您有文本字段,那么该字段上将有一个属性更改侦听器,然后每当字段更改时,一些事件将被解雇到公共汽车上。当然,你仍然需要从ui绑定到模型对象(我建议Gwittir,它可以很好地完成所有这些)。
第二个问题是类似的,服务器通过你现有的任何方式进行回调,然后这应该在总线上触发一个事件,表示“字段无论有什么新值!!!”,并且在那时个别字段(应该注册和收听)可以决定是否听取该事件并做出适当的反应。
所以,基本上,你的字段应该是监听总线,无论何时模型改变,无论是从服务器还是ui端,都应该有一条消息发送到总线,所以任何感兴趣的听众都可以处理这种改变。这解耦了设计并处理了两种情况。并简化了复杂的小部件级别交互。
我不认为这个设置会以任何有意义的方式违反MVP,为了做一个最纯粹的(因为我框架MVP)你可以让你的主持人听公共汽车,然后告诉视图改变,但对我来说,似乎是一个毫无意义的抽象,耦合和错误源,以后会有更多的工作。
如果这是对错误问题的回答,请告诉我,如果我不理解问题的微妙性,我会编辑。