ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。
ここでは、主に、
・メモリ上に、要素をもつ
・イベント発生時の動き
・画面の構成
ということで、今、「画面の構成」をやっています。
今回は、ツール機能などに入る、エクステンションについて考えてみたいと思います。
■エクステンションの考え方
エクステンションは、ユーザーが勝手に(^^;)プログラムを作って、それを、何らかのイベント(自分が起動するか、画面の何らかの操作等をしたときに)のときに、テキトーな引数を渡して呼び出すっていうものです。
これにより、ユーザー側では、いろんな処理を追加できるわけです。
これを実現するには、動的にプログラムをリンクして呼び出す仕組みを使えばいいわけです。
で、それについて、各社各様のやり方がありますが、まあ、とりあえず、以下のやり方を使えば出来るよ!というのを挙げておきます。
■Windowsの場合、DLLか、コマンドの実行
Windowsの場合は、動的にリンクする方法として、DLLでオブジェクトをつくっておいてもらって、それを呼び出すということができます。
呼び出すタイミングとDLL、引数などは、設定ファイルに書いてもらうという感じになるのかな?
もっとも、DLLでなくても、コマンドラインで動くプログラムを、呼び出してもいいわけなのですが。。
■Javaの場合はリフレクション
Javaの場合は、リフレクションを使って、DLLとおなじようなことを実現できます。
リフレクションでクラスをロードするわけですが、どのクラスを、どのタイミングで呼び出すかについては、やはり、設定ファイルに書くのかな?
■Linuxはsoオブジェクト
Linux等においては、ファイルの拡張子に.soとつく動的モジュールを作ることで実現できます。
もちろん、コマンドラインで動くプログラムを、呼び出してもいいわけなのですが。。
いままでと同様に設定ファイルでもいいわけですが。。
■WebAPIやソケット通信は。。。
もっとも、このネット社会、REST型のWebAPIを呼び出すことによってエクステンションすれば、SOAちっくになって、もっと簡単に拡張できそうですけど・・そういうのは、みないなあ。。あるのかなあ。。
あと、同様に、ソケット間通信にしちゃえばいいじゃん!プラットフォーム関係ないし・・と思うかもしれませんけど、確かにそーなんですけど、そういうのも、みないなあ。。あるのかなあ。。
■渡す引数
で、操作できるように、引数を渡すわけなんですけど、このとき、今画面表示しているものそのものを渡すか、コピーして渡すか?という話があります。
そのものを渡すと、ぐちゃぐちゃにされるリスクは・・・・
まあ、あったりします(^^;)