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

プロジェクト間での相互の値受け渡し

環境/言語:[OS : Windows XP Professional / 言語 : Visual Basic .NET / .NET Framework : 2.0]
分類:[.NET]

【解決したい問題】

はじめて投稿します。
VS2005から.NETに触れた.NET初心者です。

Windowsフォームアプリケーションのプロジェクト間での値の受け渡しについてご教授ください。
似た質問は過去にもいくつかありますが、いまいち良く分かりません。
要件は下記2つです。
1)異なるプロジェクト間(VSでのビルドを前提にしているので異なるexe/dll間)で値を受け渡す。
2)プロジェクトの参照は循環してしまう。Aフォーム→Bフォーム、Bフォーム→Aフォームの値受け渡しをしたい。

プロジェクトを分けるべきではないとの見解もありますが、この問題は別にして、あくまでプロジェクトを分けるという前提での値受け渡しについてご教授いただければと思います。
2)があるので、プロジェクト参照するわけにはいきません。showメソッドが使えない?
お世話になります。

■No12850に返信(かぷちーのさんの記事)
> Windowsフォームアプリケーションのプロジェクト間での値の受け渡しについてご教授ください。
> 似た質問は過去にもいくつかありますが、いまいち良く分かりません。
> 要件は下記2つです。
> 1)異なるプロジェクト間(VSでのビルドを前提にしているので異なるexe/dll間)で値を受け渡す。
> 2)プロジェクトの参照は循環してしまう。Aフォーム→Bフォーム、Bフォーム→Aフォームの値受け渡しをしたい。
>
> プロジェクトを分けるべきではないとの見解もありますが、この問題は別にして、あくまでプロジェクトを分けるという前提での値受け渡しについてご教授いただければと思います。
> 2)があるので、プロジェクト参照するわけにはいきません。showメソッドが使えない?

循環参照しないように、
各プロジェクト(配下のクラス群)を作るべきだとは思いますが…

画面は画面だけ纏めてプロジェクトを作成する事は不可能なんですか?
こんにちは、じゃんぬ です。

■No12854に返信(なおこ(・∀・)さんの記事)
> > 2)プロジェクトの参照は循環してしまう。Aフォーム→Bフォーム、Bフォーム→Aフォームの値受け渡しをしたい。
> > プロジェクトを分けるべきではないとの見解もありますが、
> > この問題は別にして、あくまでプロジェクトを分けるという前提での値受け渡しについてご教授いただければと思います。
> 循環参照しないように、
> 各プロジェクト(配下のクラス群)を作るべきだとは思いますが…
> 画面は画面だけ纏めてプロジェクトを作成する事は不可能なんですか?

その前に、この A, B の関係には仕様段階で無茶があると感じます。
A -> B、この時点で、B は A なんて知りません。知ってはいけません。
A -> B に値を渡した時点で、B の値は A 自身が回収する役割になるべきです。
B から自発的に渡すのは、お友達関係になってしまいますからね。
双方向にすると、オブジェクト指向以前に "モジュールの大前提" を破ることになります。

# 回収できる仕様になってなければ、仕様がないですね。(^^)
■No12850に返信(かぷちーのさんの記事)
> Windowsフォームアプリケーションのプロジェクト間での値の受け渡しについてご教授ください。
> 2)プロジェクトの参照は循環してしまう。Aフォーム→Bフォーム、Bフォーム→Aフォームの値受け渡しをしたい。

#値というのが何なのかにより回答が変わってくるかも

値が単なるオブジェクトなら、その型を独立したクラスライブラリにしてそれぞれで参照するとか。
なおこさん、じゃんぬねっとさん、まどかさん、レスありがとうございます。

なおこさん>循環参照しないように、
なおこさん>各プロジェクト(配下のクラス群)を作るべきだとは思いますが…
なおこさん>画面は画面だけ纏めてプロジェクトを作成する事は不可能なんですか?

この辺になるとプロジェクトの括り方が争点になってしまい中々難しい話です。
Windowsフォームが200くらいあるシステムなんですが、画面だけを纏めてプロジェクトを作るのはどうも違うような気がしてしまいます。

まどかさん>値というのが何なのかにより回答が変わってくるかも
まどかさん>値が単なるオブジェクトなら、その型を独立したクラスライブラリ
まどかさん>にしてそれぞれで参照するとか。

これはA、Bとは別にクラスライブラリプロジェクトを作ってそれをA、Bそれぞれが参照するということでしょうか?
いまいち具体的なコードが分かりませんが、AとBはそれぞれWindowsフォームで画面があります。Aの画面とBの画面で値を渡したいのですが、実際どのようなコードになるのでしょうか?
値というのは配列などの複雑な形式ではなく単に横並びで1個〜10個程です。

じゃんぬさん>その前に、この A, B の関係には仕様段階で無茶があると感じます。
じゃんぬさん>A -> B、この時点で、B は A なんて知りません。知ってはいけません。
じゃんぬさん>A -> B に値を渡した時点で、B の値は A 自身が回収する役割になるべきです。
じゃんぬさん>B から自発的に渡すのは、お友達関係になってしまいますからね。
じゃんぬさん>双方向にすると、オブジェクト指向以前に "モジュールの大前提" を破ることになります。

回収するという意味が理解できません。Bに渡しているだけで所有者はあくまでAということでしょうか?Bをインスタンス化している時にAインスタンスが破棄されててはいけない?ということ?でしょうか??
今回の具体的な仕様は、
AフォームとBフォームは検索キーが同じで検索ターゲットが異なります。A、Bそれぞれが独立した機能としても使用されますが、Aを見た後にB、Bを見た後にAという使用のされ方もします。このときに互いに検索キーを渡しあいたいのです。
実際はAとBだけではなく他にもたくさんあってそれを全部1プロジェクトにするのは違うような気がしたので、それぞれをプロジェクトで構成しようと考えています。
。。。やっぱりプロジェクトの構成から違うんでしょうか?ヒューマンインターフェースでの機能毎にプロジェクトを分けるほうが直感的に分かりやすいと思うのですが、この考え自体が固定的なのかな。。。
#なんか変な回答をしたようで。。。

お互いが独立したインスタンスなので何か間にマネージャ的なものを存在させるしかないでしょう。
しかも今回は片方がEXEなのでそれも難しいと思います。
単にフォームの話であれば、ソースクローンで妥協するとか、
または、ファイルマッピングなどでグローバルなメモリ空間を利用するとか。
#反則技でしょうけど。

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