3

アプリケーションの 2 つの場所で使用されているコンポーネント C があるとします。たとえば、2 つのタブに表示されているフォルダーのリストがあります。ユーザーが一方のフォルダの名前を変更すると、この変更は他方にも反映される必要があります。

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

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

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

この場合のベスト プラクティスは何ですか? EventBus を効率的に使用するにはどうすればよいですか?

4

2 に答える 2

5

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

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

于 2012-03-19T20:35:13.530 に答える
0

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

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

于 2012-03-19T21:19:30.060 に答える