2011-01-17 9 views
5

GWTのHas****Handlersインターフェイスの意味を理解できません。クラスがHasClickHandlersaddClickHandler)とClickHandleronClick)のインターフェイスを実装する場合の違いは何でしょうか。ハンドラがgwtの意味するもの

ありがとう

答えて

7

HasClickHandlers - クリックできるもの。ボタン

ClickHandler - クリック

HasClickHandlersオブジェクトに処理するいくつかのコードは、ユーザーがそれをクリックしたときに反応することができ、ボタンのようなウィジェット、です。しかし、ボタン自体は、ユーザーがクリックしたときに何が起こるべきか分かりません。開発者はClickHandlerオブジェクトを作成できます。これは、ユーザーがそのボタンをクリックしたときに何が起こるべきかを実装するコードです。ボタンにはClickHandlerと指定してユーザーのクリックに反応させることができます。つまり、ボタンにはクリックハンドラ(HasClickHandlers)を保持することができます。プレゼンターからビューを切り離す

HasClickHandlers getSaveButton(); 

の代わりに、単に

Button getSaveButton(); 

、Googleの支持者:GWTはアプリケーションのようなメソッドのシグネチャとビュー・インタフェースを定義する必要があると言うんなぜ


一つが求めることができます。プレゼンターは通常、ボタンのすべての機能をほとんど気にしません。通常、ボタンはクリックハンドラを使用して使用できるものです。 HasClickHandlerのようなインタフェースは、メソッドが非常に少なく、模擬するのが非常に簡単です。ただし、実際のボタンを使用すると、テスト用のボタンを作成するためにUIフレームワーク全体の一部または一部を初期化し、前提条件のコンテキストクラスをインスタンス化する必要が生じることがあります。

インターフェイスがButtonの代わりにHasClickHandlerを返すようにすると、プレゼンター用のユニットテストコードは、HasClickHandlerのようなインターフェイスを単純にモックすることによってUIフレームワークの複雑さから完全に切り離すことができます。これは、(UIフレームワークの初期化/相互作用のオーバーヘッドがないため)非常に高速なユニットテストである、より簡単なテスト用足場を意味します。

http://googletesting.blogspot.com/2009/08/tott-testing-gwt-without-gwttest.html


編集

OPは尋ねる:

をOK、例えばABCクラスがHasclickhandlersとClickhandlerを実装し、次にonClickとaddClickHandler(HandlerRegistrationを返す)を実装すると、1)clickイベントからonClickメソッドを操作し、2)他のクラス(ClickHandlerとイベントを登録するためにABCクラスのaddClickHandlerを使用しました)クリックが発生したばかりですか?右?

ABCのようなクラスはHasClickHandlersを実装しません。ボタンのようなGWTウィジェットだけがHasClickHandlersを実装します。 Googleはボタンのようなウィジェットに変数参照を宣言する代替手段としてHasClickHandlersインターフェースを提供するだけです。これらのウィジェットは、登録されたClickHandlerにボタンクリックについて通知します。

クラスABCは、ClickHandlerを実装してもよく、ClickHandlerから派生する内部(可能な匿名)クラスを含んでもよい。典型的な使用法は次のようになります。

public class ABC { 
    ...  
    getSaveButton().addClickHandler(
     new ClickHandler() { 
      public void onClick(ClickEvent event) { 
       saveToDatabase(); 
      } 
     } 
    } 
    ... 
+0

ok、 ABCクラスがHasclickhandlersとClickhandlerを実装し、次にonClickとaddClickHandler(HandlerRegistrationを返す)を実装すると、1)clickイベントからonClickメソッドを操作し、2)他のクラス(ClickHandlerとイベントを登録するためにABCクラスのaddClickHandlerを使用しました)クリックが発生したばかりですか?右? – Deam

+0

@ user330281 - 編集を参照 –

2

HasClickHandlersは、クリックイベントを生成するオブジェクト用です。 ClickHandlerは、イベントを処理するオブジェクト用です。

たとえば、ボタンはクリックイベントを生成します。 Clickイベントを処理する場合は、そのようなコードを含むClickHandlerを作成します。このClickHandlerをButtonオブジェクトに登録すると、クリックが発生したときにButtonはそれを誰に伝えるかを知ることができます。 HasClickHandlersインターフェイスは、ClickHandlersを登録するためのインターフェイスであるButton(FocusWidget親クラスを介して)によって実装されます。このインタフェースは、単にClickHandlerの登録を標準化します。

関連する問題