gpt4 book ai didi

java - GWT:AcceptsOneWidget vs Composite vs IsWidget

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:35:51 24 4
gpt4 key购买 nike

GWT 有许多名称相似(并且看似用途相似)的类型:

  • 小组件
  • AcceptsOneWidget
  • 复合
  • IsWidget
  • 简单面板

何时/何地适合使用其中的每一个?它们与 RootPanel 有什么关系?

最佳答案

让我们首先将接口(interface)与类分开。

接口(interface)非常适合模拟(因此无需缓慢的 GWTTestCase 即可测试您的应用):

  • IsWidget:当您只需要一个小部件的句柄,而不依赖于小部件 类。这通常与 MVP 一起用作表示 View 的方式。
  • AcceptsOneWidget:当您需要单个小部件的占位符时(以 IsWidget 的形式)。这通常与 Activity 一起使用,以将 view (IsWidget) 插入给定的 slot (AcceptsOneWidget)。

您列出的类都扩展了 Widget,因此它们依赖于 JSNI 并且(大部分时间)需要在 GWT 环境 中运行(对于单元测试,表示 GWTTestCase):

  • Widget:所有小部件的基础。实现从 asWidget() 返回自身的 IsWidget
  • Composite:当您需要创建一个从其他小部件构建的小部件同时隐藏它们的实现时的基类。虽然您可以扩展现有的小部件,但通常最好将其隐藏在 Composite 中,这样您只公开需要/想要公开的 API。 Composite 是关于“组合而不是继承”和封装。标准小部件中的组合示例包括 TabPanel(由 TabBarDeckPanel 构建)、DateBox(由TextBoxDatePickerPopupPanel 中),ValueListBox 包裹了 ListBoxValuePicker 包装了一个 CellList。在许多情况下,鉴于面板接受 IsWidget 子级,您可以简单地实现 IsWidget 而不是扩展 Composite,但有时有一个 true 小组件
  • SimplePanel 一个实现了 AcceptsOneWidget 的面板,在使用 Activity 时用作 插槽(但您也可以轻松实现 AcceptsOneWidget 插入任何类型的面板)

话虽如此,Google 最近开源了 GWT-Mockito将 Mockito 插入 GWT.create() 并使用 classloader magic 重写 JSNI 方法并删除 final 修饰符,以便您可以在测试中直接使用小部件无需 GWTTestCase 或 MVP。

因此,总而言之,这取决于您处理代码的方式,以及您构建应用程序的方式。如果您使用 MVP,请在您的presenter 中坚持仅依赖于接口(interface)(IsWidgetAcceptsOneWidget),这样您就可以轻松地在测试中模拟您的 View .
否则,或者如果您想要一个 View 是 UiBinder 模板的“简化 MVP”,请尝试使用 GWT-Mockito 进行测试并直接使用小部件。
当然,您可以在同一个应用程序中混合使用这两种方法。在任何情况下,将您自己的小部件构建为用于低级事物(很少需要)的 Widget,以及用于其他一切,而不是扩展现有的小部件。

关于java - GWT:AcceptsOneWidget vs Composite vs IsWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17310828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com