25

Eclipse RCP のコンテキストにおけるアクションとコマンドの違いは何ですか? どちらもメニュー エントリに貢献していることは知っていますが、どちらが優れているのでしょうか。なぜ?

私が読んだすべてのオンライン リソースの中で、両者の違いをしっかりと理解することはできませんでした。私は実際にそれらを使用しようとはしませんでしたが、より高いレベルの観点から始めるためにそれらを理解したかっただけです.

ありがとう

4

3 に答える 3

41

eclipse wiki FAQ を読みましたか? コマンドとアクションの違いは何ですか?

アクションとコマンドが基本的に同じことを行うことはすでにご存じでしょう。特定のコードを実行させます。これらは、主にユーザー インターフェイス内のアーティファクトによってトリガーされます。

Actionに関する主な関心事は、マニフェストとコードがすべて Action に格納されることです。
アクション デリゲートにはいくつかの分離がありますが、依然として基になるアクションに接続されています。選択イベントはアクションに渡されるため、現在の選択に基づいて (プログラムによって) 有効な状態を変更できます。これはあまりエレガントではありません。また、特定のワークベンチ パーツにアクションを配置するには、いくつかの拡張ポイントを使用する必要があります。

コマンドは、これらすべての問題をほとんど解決します。基本的な考え方は、コマンドは実行されるコードの抽象的な考え方にすぎないということです。コードの実際の処理は、まあ、 handlers によって行われます。ハンドラーは、ワークベンチの特定の状態によってアクティブ化されます。この状態は、プラットフォーム コア式によって照会されます。これは、現在アクティブなハンドラーに基づいて異なる動作をする 1 つのグローバル Save コマンドのみが必要であることを意味します。

コマンドのプロパティ

この記事では、違いについて詳しく説明します

アクション:

  • UI と処理は常に関連付けられています。お互いを引き離すわけにはいかない
  • アクションはワークベンチのさまざまな部分 (ポップアップ メニュー/ツールバー) に提供できますが、それらはすべて異なる拡張ポイントであるため、複数の場所で XML を複製することになります。最悪なのは、すべての拡張ポイントが同じ構成を期待しているわけではないということです。
  • 複数の場所でアクションを指定することは、メンテナンスの悪夢です。アクションのアイコンを変更する必要がある場合は、すべての場所を変更する必要があります。
  • plugin.xml でのアクションの複製に関するもう 1 つの問題は、同じアクションの複数のインスタンスがメモリ内に作成されることです

コマンドにはより多くの拡張ポイントが含まれますが、次の点に注意してください。

  • Handler は Command とは別に宣言できます。これにより、同じコマンドに対して複数のハンドラ宣言が可能になります。
  • すべてのハンドラーのactiveWhenが評価され、最も具体的な条件に対して true を返すものが選択されます。これらはすべて、ハンドラーをメモリにロードすることなく実行されます。プラグインをロードしなくても
  • パラメータを定義することは、表示名と ID のマップを返すことです。名前はキー バインド ページに表示され、ID はキー シーケンスが押されたときにコマンドを呼び出すために使用されます。
  • IExecutionListener を定義します。これは単にコマンド実行のオブザーバーであるため、拒否したり、イベントに変更を加えたりすることはできません。
于 2009-02-16T07:01:52.197 に答える
6

VonC の優れた回答に加えて、アプリケーションが比較的小さい場合、コマンドは少し過剰になる可能性があります。それらはセットアップが比較的難しく、複数のパースペクティブ、エディター、およびビューがある場合に最も効果を発揮します。

シンプルなものなら、アクションを使います。

于 2009-02-16T07:36:05.517 に答える
4

また、アクションはEclipseの新しいバージョンで非推奨になる可能性があることに注意してください。最初からコマンドを使用することをお勧めします。

于 2010-06-14T08:09:59.200 に答える