我正在寻找有关GWT架构的指导 - 何时使用自包含小部件与MVP /活动/场所。
阅读了Google文档&扫描Stackoverflow,gwt-examples项目提供了这个问题的最佳说明:http://code.google.com/p/gwt-examples/source/browse/trunk_2012/DemoGwtEditor/src/com/gonevertical/client/?r=3138#client%2Fviews
应用程序分为强解耦视图,每个视图对应一个DOM对等体。活动&地方用于管理逻辑/ RPC&给定视图的导航。虽然不精确,但为简洁起见,我将此模式称为MVP。
小部件不符合此模式,包含视图和逻辑/ RPC调用。
对于这个问题的上下文,我正在考虑使用TabLayoutPanel创建单独的“屏幕”的复杂GWT应用程序。每个标签/屏幕广泛地涉及用户活动。 Mint.com就是这种界面的一个很好的例子:仪表板选项卡,交易选项卡,预算选项卡,趋势选项卡等。每个选项卡都是由许多子组件构建的:图表使用选择器,报表选择器,事务表等
像交易表这样的子组件可能是几个GWT本地的组合 - 例如一张桌子上有几个按钮。谷歌doco将这种子组件显示为被解组为MVP。
使用MVP处理子组件意味着:
另一方面,作为小部件的子组件意味着:
答案 0 :(得分:2)
要回答这个问题,首先要看一下活动和地点 - 因为活动通常是主持人的双重职责。活动经理负责处理屏幕的某个区域。例如,选项卡区域可以由活动管理器控制,其中每个活动是不同的选项卡。这表明每个标签都有自己的演示者。演示者只需要了解视图UI部分,它需要将数据加载到/从中加载(如果只编辑数据,则可以将其减少到编辑器驱动程序)以及它需要响应事件的项目。登记/> 演示者不需要知道仅与视图响应有关的视图事件,例如公开面板或被选中的事物。演示者参与的唯一时间是UI发送需要一些业务/模型逻辑的事件 - 例如在列表项上显示更多详细信息,创建新列表项或保存模型。
这有帮助吗?
答案 1 :(得分:2)
自定义小部件和MVP无法比较。它们不是一个问题的答案选项,而是两个不同问题的答案。
问题1:我什么时候应该编写自定义小部件? 问题2:我应该使用MVP(或者我应该使用MVC还是不应该使用任何模式)?
首先回答问题2:
使用MVP
使用自定义小部件
答案 2 :(得分:1)
小部件和MVP之间的区别并不像你想象的那么清晰 您可以使用MVP模式很好地实现小部件。
这方面的一个例子是GWT自己的CellWidgets
像CellTable
这样的CellWidgets在内部使用presenters和视图来将视图与逻辑/状态分离。这使得对它们进行单元测试变得容易。
我认为没有完美的解决方案,它可能还取决于用例/应用程序。
我通常会尽量避免从小部件本身进行后端调用(RPC等)。
我尝试以某种方式设计小部件,他们处理和最终显示的数据由演示者从外部设置。
因此,基本上小部件只是像子组件一样查看,这些子组件由演示者填充和控制并嵌入到视图中。
如果您想拥有更复杂的小部件,这些小部件还包含业务逻辑和后端调用,请尝试将MVP模式应用于小部件。
它还取决于您使用的MVP框架类型。通过活动和地点(确定,严格来说不是MVP框架),您通常没有嵌套的演示者(请参阅Thomas Broyer blog)。 当您使用具有GWTP概念的PresenterWidgets MVP框架并允许嵌套演示者时,这会有所不同。