1

さまざまな製品を構築するための共通のeclipse/osgiコードプラットフォームがある場合、共通のコードからアクティベーターを継承できますか/継承する必要があります

例えば

org.test.common.PluginActivator
org.test.common.ui.UIPluginActivator

org.test.product1.Product1PluginActivator
org.test.product1.ui.Product1UIPluginActivator

org.test.product2.Product2PluginActivator
org.test.product2.ui.Product2PluginActivator

すべてのUIアクティベーターを共通のものから継承させたいのですが、非UIアクティベーターについても同じです。startメソッドはすべてsuperを呼び出します...しかし、これが悪いosgi /バンドルの練習であるのか、それとも問題を引き起こす可能性があるのか​​疑問に思います。

誰かがこれについて何かアイデア/意見を持っていますか?

4

3 に答える 3

4

とにかく子が親のバンドルなしでは実行できない場合 (つまり、機能的な依存関係がある場合)、Activator を親から継承させることによって追加の結合を追加することはありません。

共通の親からの継承には注意が必要です。プラグインに既にそうする理由がある場合を除きます。定数を継承しているだけであっても、バンドルのロードを強制しているためです。

于 2009-08-19T16:46:21.847 に答える
0

私はそうは思いませんが、実際には、(厳密に OSGi の観点からではなく) 一般的なサブクラス化の乱用だと考えています。

私見では、アクティベーター クラス自体を (コードやランタイム パフォーマンス フットプリントのように) 最小限に保ち、主に実際の作業 (もしあれば) をワーカー クラスに委譲するのが最善です。何かをサブクラス化する必要がある場合は、それらのワーカー クラスでそれを行うことができます。

于 2011-02-01T16:45:08.580 に答える
0

そうでなければSpring DM(またはiPOJO、Peaberryを使用したGoogle Guice、またはDeclarative Servicesなど)をお勧めするため、Eclipse RCPを使用していると想定しています。そうすれば、別のバンドル アクティベーターを再度作成する必要がなくなります。

一方、私のチームは、BundleActivatorRCP 関連のバンドルに共通の要約を採用しました。私にとっては、実際のバンドル アクティベーターを中央のバンドルに配置すると、結合が増加します。

于 2009-08-24T21:13:31.850 に答える