【问题标题】:GWT, MVP - many widgets, best practice [closed]GWT,MVP - 许多小部件,最佳实践 [关闭]
【发布时间】:2011-07-21 21:03:43
【问题描述】:

我正在构建我的第一个 GWT 应用,采用 MVP 模式设计。现在我有了一个视图,它应该填充一个具有许多字段的 DTO(大约 20 个)。我希望它在这里变得干净将所有这些小部件/值传递给我的 dto 的最干净/不那么痛苦的方法是什么?

为每个 DTO 字段创建一个小部件并通过 onClickHandler 传递值?这将是很多锅炉代码,必须有另一种方式。有一个 FormPanel,但在阅读 GWT 邮件列表时,它应该只用于文件上传。

为了完整起见:我在我的项目中使用 GWTP,它简化了基本的 MVP 内容。

【问题讨论】:

  • 不确定你在找什么(就像你的问题仍然不是那么奇怪:))如果你在 UI 绑定之后使用 UI binder 如果你在 Disptach(后端)绑定之后看看GWT 平台框架比 GWT 自己的 MVP 成熟得多

标签: java gwt dto


【解决方案1】:

如果您正在寻找数据绑定解决方案,那么您应该看看GWT's ui editors

来自 GWT 文档:

GWT 编辑器框架允许存储在对象图中的数据 映射到编辑器图上。典型场景是布线对象 从 RPC 机制返回到 UI。

编辑器框架结合使用延迟绑定和命名约定来减少样板代码。该系统是高度可定制的,因此如果由于某种原因您不能遵循命名约定,您可以使用注释来指定 bean 属性的编辑器。

【讨论】:

  • 就是这样,我一直在寻找这样的东西。谢谢塔希尔
【解决方案2】:

我几乎所有的小部件都使用UiBinder。它鼓励正确分离表示和逻辑,并有助于跟踪您的小部件。

【讨论】:

    【解决方案3】:

    您的视图界面应该包含至少一个方法,用于您要显示/编辑的每个属性。因此,例如,如果您的 DTO 有一个属性“名称”,那么您的 View 接口应该包含该属性的方法。

    interface ExampleView extends View {
    
        // for a textbox
        HasValue<String> getName();
    
        // for a label
        HasText getName();
    
        // maybe a save button, for updating the dto and further actions
        HasClickHandlers getSaveButton();
    }
    

    现在您的演示者可以将数据从 DTO 设置到您的视图中,或者如果是文本框,您可以从小部件中读取更改后的值。

    可以使用绑定到 HasValue 接口的ValueChangeHandler 来实现从小部件更新 DTO,或者您的 ViewImpl 可以有一个通知您的演示者更新 DTO 的按钮。

    此解决方案导致更多代码(样板文件),但将模型与视图分开。

    这里是各种接口 HasValueHasTextHasClickHandlers 的 API 文档。

    【讨论】:

    • 我知道如何实现这一点,我的问题指向“问题”:如果我的 DTO 中有这么多字段,我的视图界面应该包含所有这些小部件。这对我来说似乎很乱。
    【解决方案4】:

    思考实现解决方案的不同方法,然后提出以下问题。

    • 代码行数最少。
    • 具有最小的圈复杂度。如果有的话,如果有的话,而且大部分是基本的 getter 的东西比需要一种方法有很多条件代码的东西要好得多。
    • 这是最容易阅读的。许多小的构建块比一个大的构建块更好。
    • 哪个最容易单独测试。

    最好的解决方案是您认为最容易阅读、更改和测试的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2012-03-15
      • 2023-03-22
      • 2013-10-02
      相关资源
      最近更新 更多