ユーザー入力を収集するモーダル ダイアログが必要です。次に、メインフレーム アプリケーションで同じデータを使用する必要があります。
通常、モーダル ダイアログには、必要なものを格納できる DataType へのポインタがあり、ユーザーがモーダル ダイアログを閉じたときにデータを回復できるように、メインフレームからこのオブジェクトを参照で渡します。
これはデータをやり取りする最良の方法ですか?
気分が悪い!
ユーザー入力を収集するモーダル ダイアログが必要です。次に、メインフレーム アプリケーションで同じデータを使用する必要があります。
通常、モーダル ダイアログには、必要なものを格納できる DataType へのポインタがあり、ユーザーがモーダル ダイアログを閉じたときにデータを回復できるように、メインフレームからこのオブジェクトを参照で渡します。
これはデータをやり取りする最良の方法ですか?
気分が悪い!
ユーザーがダイアログを閉じると (おそらく DialogResult.OK で) データを渡すため、MainFrame の参照がなくても簡単にこれを行うことができます。
ダイアログに userNameTextBox と呼ばれる TextBox と、OK の結果でダイアログを終了するボタンがあるとします。userNameTextBox を public にするか (推奨されません)、プロパティを追加してテキストを返すことができます。
public string UserName
{
get { return userNameTextBox.Text; }
}
ダイアログが終了した後にこの値を取得するには、次のようにします。
Dialog dialog = new Dialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
string username = dialog.UserName;
}
ユーザーから1つまたは2つの値を収集する場合、@Samuelの提案は完全に適切です。
多くの値を取得している場合は、質問の解決策も問題ありません。
時期尚早の最適化の餌食になって、分離されたソリューションを過度に設計しないでください。境界オブジェクトによって、メインフレームとダイアログによって参照されるデータ構造インスタンスを参照していると思います。このオブジェクトを参照するダイアログとメインフレームの両方の問題は何ですか? このシナリオで境界/転送オブジェクトを分離する利点は何ですか?
ここで私が見た唯一のデカップリング ペイオフは、メインフレームにデータを配信する特定の実装からメインフレームをデカップリングすることです。したがって、メインフレームが Dialog をインスタンス化して Dialog.ShowModal を呼び出すのではなく、依存性注入によってメインフレームに IDataYouNeedGetter (たまたま同じモーダル ダイアログ) が提供され、適切なタイミングでメインフレームが実行します。
myGetter.SetTransferObject(dataStructInstance)
myGetter.GoGetTheData()
// do stuff with dataStructInstance now that myGetter set it up.
しかし、デカップリングの特定の必要性をすでに知っていない限り、間接的なレイヤーを追加する理由はありません。
通常、単一のクラスまたは他のデータ型を使用してデータを転送できます。したがって、ダイアログはクラスのプロパティを変更するために使用されます。なぜこれが正しく感じられないのですか?
[ユーモア] メインフレームとは、大きくて古い (まだ生きていて動き回っている) コンピュータのことではないと思います。それ以外の場合は、TCP/IP が適していると思います。[/ユーモア]
これを行う最良の方法は、データをイベントにパッケージ化し、イベント バスで送信することです。
これにより、ダイアログがメインフレームから切り離されます。また、イベントを適切に設計すれば、ダイアログの使用だけに制限されることはありません。
言語と環境によっては、このイベント システムを簡単かつ安価に実装できます。私はバージョン クラス ベースのオブジェクト間通信と呼んでいます。