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