2012-03-19 8 views
3

私のアプリケーションの2か所で使用されているコンポーネントCがあります。たとえば、2つのタブに表示されているフォルダのリストがあります。ユーザーがあるパーツのフォルダの名前を変更すると、この変更は他のパーツにも反映されます。GWTコンポーネントでEventBusを使用するベストプラクティス

私はこのためにEventBusを使用し、フォルダコンポーネントがEventBusイベントを発生させるように考えています。たとえばFolderChangedEventです。このイベントは、フォルダリストを自動的に更新する2番目のフォルダコンポーネントによってインターセプトされます。

問題は、ある時点で3番目の場所でこのFolderコンポーネントを使用したい場合、この場所にもフォルダリストが更新されるということです。これは、アプリケーションの望ましい動作ではない可能性があります。

通常、Folderコンポーネントには独自のaddFolderChangedHandler(...)メソッドがありますが、このコンポーネントはかなり複雑でサブコンポーネントがあるため、スパゲッティ型のコードが作成される可能性があります。しかし、私はこのコンポーネントがアプリケーション固有のロジックを含んでいて、アプリケーションのEventBusに直接イベントをスローするような気がしません。

このケースのベストプラクティスとはどのように効率的にEventBusを使用しますか?

答えて

4

イベントバスの目的は、コードを読みやすく管理しやすくするために、イベントの処理をより簡単にし、はいにします。私はあなたのジレンマがイベントを分類する方法にあると仮定してこの質問に答えます。

GWTEventクラスにはsource()メソッドがあります。これは、誰がイベントを解雇したかを示します。 これが受け入れられない場合は、送信者によって入力された「id」フィールドがイベント内に常に存在することがあります。したがって、TreeView1がイベントを発生させている場合、イベントのIDは "treeView1"に設定されます。イベントハンドラがこのイベントを受け取ると、IDをチェックしてイベントを処理するかどうかを決定します。この方法で、アプリケーション全体に対して単一の "God"イベントハンドラを使用できます。

0

eventBusは基本的な実装には適していますが、複雑なアプリケーションではMyObjectCreatedイベントが発生したときに作成された新しいNyObjectなど、イベントでデータを送信する必要があります。

GWT-Structs libraryにはこれがうまく実装されています。参照先example動的パブリッシャ - サブスクライババインドを参照して、型指定されたパブリッシャとサブスクライバでデータを渡す方法を確認してください。

関連する問題