11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

プラグイン機構を持つアプリの作り方[C#とJava]

Last updated at Posted at 2019-04-01

少し、表題の件で調べてみたのでこちらでも投稿。
ただ、プラグインアーキテクチャは2003年頃に活発な動き(論文やら記事やら)がありましたが、最近はあまり議論されない内容のようです。
今回は参考文献のサンプルを実装して基本的な作り方についての感触をつづっています。

基本的な作り方
  • インターフェース(GUI、コマンド)を定義する
  • インターフェースの拡張方法を定義する
  • 定義したインターフェースを実装したプラグイン、ホストアプリケーションを作成する
基本的な利用方法
  • プラグインは何がしかの実行形式ファイルにする
  • ホストアプリケーションはそのファイルを特定の場所に格納して利用する
C#の場合
  • インターフェースを定義したdllを作成する
  • 定義されたインターフェースを実装したプラグインをdllで作成する
  • プラグインを読み込んで利用するホストアプリケーションを作成する

PluginSystem(CS).png

PluginSystem(CS)_deployment.png

Java の場合
  • プラグイン用にインターフェースを定義する
  • 定義されたインターフェースを実装したプラグインをjarで作成する
  • Jarファイルには、プラグインクラス名を記したマニフェストファイルを作成する
  • プラグインを読み込んで利用するホストアプリケーションを作成する

Class_Plugin System(java).png

Deployment_Plugin System(java).png

pythonなどインターフェースを持たないものではどう実装するのか?

Pythonはインターフェースを持たずに、多重継承を許容する仕様のようです。
実装する場合はかなり気を付けないと他モジュールの影響に苦しみそう…
こちらは引き続きの調査事項…

個人的な所感
  • C#やJavaなどで実装する場合はどういうプラグインを作れるようにするかを含めたインターフェースの定義が必須になる
  • IDEのようなものを実現したいならVisualStudioやEclipseのプラグイン開発のインターフェースを参考にすると良さそう
  • 記載していないが、Pythonなどのインターフェースが存在しない言語では多重継承を利用して実装するみたい
  • デスクトップアプリの場合、VisualStudioやEclipseの例を見る限りは、基本的なGUIの構成やデザインは現状変わっていない
    • それぞれに対して拡張を定義する機構を持っている
    • メニュー/ツールバー/ツールウィンドウ

[同じ内容やコードはこちらを参照してください(主にこっち)]
https://github.com/dandan611/SampleOfPluginSoftware

参考文献
11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?