DOBON.NET DOBON.NETプログラミング掲示板過去ログ

プロセス間通信かもしれない

環境/言語:[WinXP/VB2005]
分類:[.NET]

やはり、ここしかありません。
3年ぶりくらいの投稿になります。

今回、ファイルエクスプローラならぬアイテムエクスプローラのようなものを
作ろうと考えています。

そうです、ほとんどの皆さんが想像にたやすい、平凡なアプリだと思います。
どんなものかだいたいイメージできると思いますが、念のため、
どういうアプリをイメージしているか簡単に説明します。

Windows OS のエクスプローラが様々なファイルを管理しているように、
ここでは、様々な種類の(異なるクラスの)インスタンスを管理します。
(したいです。)

□・・・フォルダ
△・・・アイテム(様々な種類のアイテムがある)

□−□−△
 | |
 | −□−△
 |   |
 |   −△
 |
 −△

基本的には、□(フォルダ)が階層構造になっていて、
ところどころに△(アイテム)が存在する、という形です。
一つの□(フォルダ)に異なる種類の△(アイテム)が存在することもあります。

ここで、△(アイテム)を選択して、右クリックメニューなどから「編集」を
実行すると、その△(アイテム)の種類(クラス)に応じたエディタが起動し、
アイテムの詳細を編集できるようにしたいと思っています。

つまり、
1.このアイテムエクスプローラでアイテムを選ぶ
2.選ばれたアイテムの種類(クラス)に応じた、適切なエディタを起動させ、
  アイテムを編集する。

という一連の操作を行いたいと思っています。
このアイテムエクスプローラでは、今後、様々な種類のアイテム
(様々なクラスのインスタンス)をアイテムとして持たせる予定です。
そのため、エクスプローラ的な使い方をする部分
(フォルダに分けて管理する機構)と、エディタ的な使い方をする部分
(アイテムを編集する機能)を切り放しておけば、
新しい種類(クラス)のアイテムを追加する作業が単純明快になります。
(なるといいな、と思った程度です)

具体的には、アイテムエクスプローラのプロジェクトにクラスファイルを追加し、そのクラスアイテムが選択されたときのコード(エディタを呼び出すコード)を追加、そしてそのクラス用のエディタプロジェクトの追加だけで済みます。
この手順さえ理解していれば、アイテムエクスプローラのソースコードを
見返す必要がほぼなくなります。

このような意味で、エクスプローラ的機能とエディタ的機能の結合度をできるだけ低くしたいと思っています。

なお、アイテムエクスプローラは、全てのフォルダ・アイテムのデータを一つの
ファイルにまとめて HDD 上に持たせる予定です。アイテムのエディタにデータを受け渡す際は、アイテムエクスプローラ上で保持しているインスタンスを渡すといったイメージに近いです。なぜなら、一つのアイテムデータを Windows OS が認識できる一つのファイル、という形で表に出したくないからです。

全ての情報がつめこまれたファイルを一つだけ持ち、あとはアプリがそこにアクセスして色々な処理を内部的に行う、という形をイメージしています。
ファイル=環境というイメージで、環境の管理(バックアップ、外部ディスクへの移動など)を容易にしたいためです。
その環境(ファイル)を元に、アイテムエクスプローラがフォルダ・アイテム構造を再現し、そこから、アイテム毎に詳細の編集などを別エディタが行う、と
いったイメージです。

エクスプローラ的機能とエディタ的機能は、結合度を低くしたいのですが、扱うデータはエクスプローラ的機能が全体を一箇所にまとめて管理している、といった感じです。

ネットを一回りしてきた感想は、いろいろな方法があり、
頭が暴発しそうで適した方法を選べませんでした。

どのような手段で実装するのが最もスムーズか、
知識・見識・胆識のある方、ご教授いただけないでしょうか。
無いとは言わせない的な言い方になってしまってすみません。
■No25706に返信(クイーン・オブ・ザイヤーさんの記事)
> このような意味で、エクスプローラ的機能とエディタ的機能の結合度をできるだけ低くしたいと思っています。
この辺はプラグインの考え方が近いのではないかな。
一つの道として、DOBON.NET さんのコンテンツにもあります。

プラグイン機能を持つアプリケーションを作成する
http://dobon.net/vb/dotnet/programing/plugin.html

ただ、本当にエクスプローラ風のホストアプリケーション側を編集しないで済むようになるためには、ユースケースを十分に考えた上でかなり良い設計をしなければなりません。

> なぜなら、一つのアイテムデータを Windows OS が認識できる一つのファイル、という形で表に出したくないからです。
この時点でプロセスを分けると大変だと思います。
プロセス間通信で大量のデータをやりとりすることはできますが、効率が悪いと思います。
(どうしても、プロセスを分けたいというのであれば、テンポラリファイルに書き出して操作させることも考える)

あとは、ストレージを扱うライブラリを提供するのも手かもしれませんね。
(特定の ID を渡すと、実体に近いものが得られる)

> エクスプローラ的機能とエディタ的機能は、結合度を低くしたいのですが、扱うデータはエクスプローラ的機能が全体を一箇所にまとめて管理している、といった感じです。
正直、実現の道のりは長いという印象を受けます。
例えば、エディタが同時にコミット(実際のファイルへの保存)を要求した場合はデータの安全性はどうなるのか、数百メガバイトや数ギガバイトのデータを扱うエディタがいくつかいたらパフォーマンスはどうなるか、エディタ部の開発は外部のユーザにも開放するのか、将来の互換性はどうなるか等、不安を抱く要素は色々とあるでしょう。

チームで開発されているのであれば、どういったことが考えられるか一度ディスカッションしてみてはいかがでしょうか。
個人の開発であれば、私が挙げた観点とそれ以外にも何か考えられないか検討した上で、それらについてどのようなアプローチで取り組むか考えてみましょう。
あと、もう1点。

それらの検討をする前に、本当にそのような仕様を実現するべきなのかを考えてみてください。
ビジネスとして取り組むのであれば、本当にそこまでの作り込みが必要なのか、リスクはないのか、作り上げることによって得られる利益(効果)は何か、かかる費用(工数・開発期間)と比べて取り組むことにメリットはあるのかといった事柄です。

個人で作るのであれば、自分はどれほどその実現に意欲があるのか、時間を取れるのか、他にやるべきことがないか等を考えてみてください。
コメント、ありがとうございます。

私個人で作ろうと考えております。(※)
仕様の実現について、ご指摘にある通り、必要性や自分の意欲、
また他の方法についてなど、様々な角度から検討しておりました。

懇切丁寧なコメント、誠にありがとうございます。

※ 商品化やシェアウェアなどのビジネスは考えておらず、
  自身の挑戦として考えております。趣味に近いです。

まだ具体的な方針の決定には至っておりませんが、
遅くなってしまいましたので、一先ず経過をご報告致します。
お返事が遅くなってしまいすみません。
(今後、作業量が増えるに伴い、
 よりお返事が遅くなってしまう可能性があることを
 ご了承置き下さると幸いに存じます。)

> プラグイン機能を持つアプリケーションを作成する
> http://dobon.net/vb/dotnet/programing/plugin.html

の記事を読みました。
アセンブリに含まれる型を取得する部分など、知りたかった内容そのものでした。
またそれ以上に技術の詰まった記事で、大変勉強になりました。
使えるコードが盛りだくさんでした。
大変感謝しております。

DOBON.NET さんの記事を読み、プラグイン機能を実装したアプリケーション
の製作に魅力を感じております。

こうして様々な方法を調べていると、自身のスキルアップの必要性を
骨身に染みて感じます。今は勉強に適した季節であることなどから、
勉強しながら製作を進めたいと思いました。

今回考えているアプリが完成すれば、今後の趣味プログラミングにおいても
有用な(流用できる)ツールになるような気がしており、作っておきたい思いも
あります。また、汎用的な使い方ができるよう、改修・拡張しやすいものに
なるよう心がけながら製作に臨みたいと思っております。

プラグイン機能を実装したアプリケーションによって実現できる可能性を感じ、
また自身のスキルアップにもつながり、やり甲斐もありそうだと感じております。
一先ず、プラグイン機能を実装したプロトタイプ(テストアプリ)を作ってみようと考えております。
もう少し関連記事を読んでからテストアプリ作りに取り掛かろうと思います。


また後日、結果を報告致します。
プラグイン機能を実装する方向で勉強のため

> プラグイン機能を持つアプリケーションを作成する
> http://dobon.net/vb/dotnet/programing/plugin.html

の記事の通り、記事と全く同一のプラグインアプリを作成しました。
いろいろ勉強になりました。
前述のアプリをプラグイン機能で実現するために、
具体的な設計に入っていきたいと思っています。
プラグインアプリを開発する際の設計のポイントなどがわかっていないせいか、
どこまでホストで実装して、どこからプラグイン側に実装させるか、
など悩みどころがいっぱいです。

そろそろ別スレッドにするか自分で考えるなどして、このスレッドは
解決という形にしようと思います。

プロセス間通信じゃなかったみたいで、失礼しましたm(。_。)m
  • 題名: Re[5]: プロセス間通信かもしれない
  • 著者: クイーン・オブ・ザイヤー
  • 日時: 2009/11/25 4:49:12
  • ID: 25910
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
長らく時間が空いてしまい失礼致しました。

実装方法について、
「プラグインアプリケーション」
とすることで解決と致します。

有難うございました。

そして次なる壁に突き当たるわけですが、
それはまた別のお話。
毎日が勉強、調べ物ばかりで
未熟なクイーン・オブ・ザイヤーですが
今後とも宜しくお願い致します。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板