Eclipse RCP のコンテキストにおけるアクションとコマンドの違いは何ですか? どちらもメニュー エントリに貢献することは知っていますが、どちらが優れているのでしょうか? また、その理由は何ですか?
私が読んだオンライン リソースのすべてにおいて、両者の違いをしっかりと理解することはできませんでした。実際に使用してみたわけではありませんが、まずはより高いレベルの観点から理解したいと考えていました。
ありがとう
ベストアンサー1
日食のウィキを読みましたかFAQ コマンドとアクションの違いは何ですか?
アクションとコマンドは基本的に同じことをするということは、すでにご存知でしょう。特定のコードを実行することです。主にユーザーインターフェース内のアーティファクトからトリガーされます。
主な懸念は行動それはマニフェストとコードはすべてアクションに保存されますアクション デリゲートには多少の分離がありますが、依然として基礎となる
アクションに接続されています。選択イベントはアクションに渡され、現在の選択に基づいて (プログラムによって) 有効な状態を変更できます。これはあまりエレガントではありません。また、特定のワークベンチ パーツにアクションを配置するには、複数の拡張ポイントを使用する必要があります。コマンドこれらすべての問題をほぼ解決します。基本的な考え方はコマンドは実行されるコードの抽象的な概念に過ぎません。コードの実際の処理は、ハンドラによって行われます。ハンドラーは、ワークベンチの特定の状態によってアクティブ化されます。この状態は、プラットフォーム コア式によって照会されます。つまり、現在アクティブなハンドラーに応じて異なる動作をするグローバル Save コマンドが 1 つだけ必要です。
これ記事違いを詳しく説明する
行動:
- のUIと操作は常に結びついているお互いを引き離すことはできない
- アクションはワークベンチのさまざまな部分(ポップアップメニュー/ツールバー)に追加できますが、それらはすべて異なる拡張ポイントそのため、複数の場所で XML が重複することになります。最悪なのは、すべての拡張ポイントが同じ構成を期待しているわけではないことです。
- 複数の場所でアクションを指定することは、メンテナンスの悪夢アクションのアイコンを変更する必要がある場合は、すべての場所で変更する必要があります。
- plugin.xmlでアクションを重複させることのもう一つの問題は、同じアクションの複数のインスタンスがメモリ内に作成される。
コマンドにはさらに多くの拡張ポイントが含まれますが、次のようになります。
- ハンドラはコマンドとは別に宣言することができます。これにより、同じコマンドに対する複数のハンドラ宣言。
- のアクティブ時すべてのハンドラが評価され、最も具体的な条件に対してtrueを返すものが選択されます。これらすべてはハンドラをメモリにロードしなくても完了します。プラグインをロードしなくても!
- パラメータを定義することは、表示名と ID のマップを返すことです。名前はキー バインディング ページに表示され、ID はキー シーケンスが押されたときにコマンドを呼び出すために使用されます。
- IExecutionListenerを定義します。これはコマンド実行の単なる監視者なので、イベントを拒否したり変更したりすることはできません。