GWT有许多类似的名称(而且似乎目的类似)类型:
WidgetAcceptsOneWidgetCompositeIsWidgetSimplePanel何时/何地适合使用其中每一个?他们与RootPanel的关系是什么?
发布于 2013-06-26 12:48:34
让我们首先将接口从类中分离出来。
接口非常适合于模拟(从而允许测试您的应用程序而不需要迟缓的GWTTestCase):
IsWidget:当您只需要一个小部件的句柄时,而不依赖于Widget类。这通常与MVP一起用作表示视图的一种方式。AcceptsOneWidget:当您需要单个小部件的占位符时(以IsWidget的形式)。这通常与活动一起使用,用于将视图(IsWidget)插入到给定的槽(AcceptsOneWidget)中。您列出的类都扩展了Widget,因此它们依赖于JSNI,并且(大多数情况下)需要在GWT环境中运行(对于单元测试,这意味着GWTTestCase):
Widget:所有小部件的基础。实现从IsWidget返回自身的asWidget()。Composite:一个基类,当您需要创建从其他小部件构建的小部件时,同时隐藏它们的实现。虽然可以扩展现有的小部件,但通常最好将其隐藏在Composite中,以便只公开需要/希望公开的API。Composite是关于“组合而不是继承”和封装。标准小部件中的复合示例包括TabPanel (由TabBar和DeckPanel构建)、DateBox (从PopupPanel中的TextBox和DatePicker构建)、包装ListBox或ValuePicker (包装CellList )的ValueListBox。在许多情况下,考虑到面板接受IsWidget子组件,您可以简单地实现IsWidget,而不是扩展Composite,但是拥有真正的Widget有时是有用的。SimplePanel是一个实现AcceptsOneWidget的面板,在使用活动时作为插槽非常有用(但您也可以很容易地实现AcceptsOneWidget以插入任何类型的面板)尽管如此,谷歌最近开源的GWT-莫奇托将Mockito插入到GWT.create()中,并使用类加载器魔术重写JSNI方法和删除final修饰符,这样您就可以在测试中直接使用小部件而不需要GWTTestCase或MVP。
所以,总而言之,这取决于你如何处理你的代码,你如何构建你的应用程序。如果您使用MVP,那么只需依赖于演示者中的接口(IsWidget、AcceptsOneWidget),这样您就可以在测试中轻松地模拟您的视图。
否则,或者如果您想要一个视图是UiBinder模板的“简化MVP”,那么在测试中尝试GWT并直接使用小部件。
当然,您可以将这两种方法混合在同一个应用程序中。在任何情况下,都可以将自己的小部件构建为用于低级别(很少需要)的Widget,而不是扩展现有的小部件,而是为其他一切构建Composite或IsWidget。
发布于 2013-06-26 11:58:13
你把一切都搞混了。
Widget:它允许您与用户交互。(例如按钮)
面板:这些小部件可以包含其他面板/小部件。可以称为小部件的容器。
AcceptsOneWidget:由只接受一个小部件的面板实现。(如SimplePanel)
组合:一种小部件的类型,它可以包装另一个小部件,隐藏包装好的小部件的方法。该组合对于从单个面板中包含的多个其他小部件的集合中创建单个小部件非常有用。
IsWidget:一个由几乎所有已知小部件实现的接口。它提供了对该小部件的访问。
SimplePanel:只包含一个小部件的面板。
RootPanel:是添加所有其他面板的基本面板。
https://stackoverflow.com/questions/17310828
复制相似问题