UI和视图方面的MVP

时间:2012-01-16 07:39:13

标签: gwt mvp

以下是什么意思?

GWT Develeopment中的目标

我们需要愚蠢的观点,而不是愚蠢的UI (View在这里是什么意思,MVP中的UI是什么?它令人困惑,请用一个小例子来解释一个简单的例子)

•避免在视图中显示状态 (它说的是哪个州,请用一个小例子来解释,一个简单的例子)

•交换不同平台的视图 (这里交换的是什么?他是否意味着改变不同的技术,比如从GWT到Flex)

请用一个简单的例子来解释:)

由于

2 个答案:

答案 0 :(得分:2)

  1. 我认为这意味着您应该尽量避免在视图中使用复杂的业务逻辑和模型状态。人们主张将GWT中的视图保持为尽可能愚蠢的原因是视图具有与窗口小部件相关的代码,并且每当您尝试在GWT中测试窗口小部件相关代码时,您必须回退到慢GWTTestCase而不是快速JUnit测试。
    在TDD(测试驱动开发)中,您严重依赖测试,为了实现高效开发,这些测试应该快速运行 因此,您尝试在GWT中执行的操作是尽可能使视图保持愚蠢,这样它们就不需要进行大量测试(可能只是最后的集成测试),并将所有与业务相关的代码放在演示者中。 Presenter应该没有与widget相关的代码,应该处理模型状态。然后,您可以使用快速JUnit测试来完全覆盖演示者中的业务逻辑代码。有关详细信息,请参阅herehere

  2. 替换不同平台的视图是指例如针对不同设备具有不同的视图实现。从不同设备查看时,为邮件应用程序设置不同的布局是有意义的 在屏幕尺寸足够的平板电脑上,您可能会在左侧显示邮件列表,在中间部分显示实际邮件内容。但是在手机上,您可能只显示邮件列表,当您点击邮件时,视图将更改为邮件内容。
    邮件应用程序的业务逻辑独立于布局/视图。因此,您尝试将此代码放在Presenter中,并以一种可以根据用户代理轻松换出它们的方式设计您的视图。您可以在GWT存储库和mobilewebapp中查看I/O conference talk示例应用。

答案 1 :(得分:1)

我最近了解到一些关于MVP Widgets的一些想法,它们在理论上并不合理,但对我和我正在合作的团队来说都没问题。

  1. 在MVP中只有一个V概念。避免在MVP中使用V vs UI,它们是相同的概念。 (UiBinder与MVP无关,但你可以使用UiBinder为你的MVP Widget构建你的V)。
  2. 模型是您的数据,只能在您的P.
  3. 内修改
  4. V是此数据的屏幕,不应更改它。
  5. P处理数据,窗口小部件的行为,事件到其他窗口小部件和服务(RPC,Rest ...)。
  6. 避免将数据实例保留在V。
  7. V和P与处理程序相互通信。有两种方法可以做到这一点。 A)直接在P上处理View事件(让V实现P中定义的接口)或 B)将P引用传递给View。让P和V将接口实现为契约。 我推荐A
  8. 某些数据在V(TextArea,Combos ...)中生成,最终成为模型的一部分。只是尝试将其变化保持在P(如6中所述)。
  9. P1和P2以及P3和......通过EventBus相互通信。
  10. 让你的P实现IsWidget这将允许你在另一个Widget的V(嵌套小部件)中实例化一个MVP小部件。这也将允许你将大MVP打造成轻量级的MVP小部件(易于保持,易于与不同的开发人员保持联系......)。
  11. 做6A)JAVA很容易测试你的小部件行为(你的P)只模拟视图。
  12. 用硒或其他人测试你的V.
  13. 执行6A)不同的V可以实现P内部接口。一个用于移动,另一个用于PC ......这比说起来容易。
  14. 这就是全部,希望这可以帮助你。