- PR -

複数フォームでの共通処理

投稿者投稿内容
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2006-01-11 20:25
>これは、Form に関係ないロジックですね。
>Form には GUI に関すること以外はあまり記述しません。


それでは、GUIに関すること以外のメソッドは、どこに定義するべきなのでしょうか?
ちなみに、使いまわしたい関数は
 A.入力された文字列の、OK/NGを判定するメソッド
 B.GUIに表示するデータを作成する
 C.ツールバーに関する処理(全ての画面で全く同じ表示内容/処理になります。)

Aは、グローバル関数的な関数のイメージです。
全Formで全く同じ処理を行う関数もあれば、一部Formのみ異なる処理を行う場合もあります。

Bは、GUIに表示するデータ(ADO.NET)を取得する関数です。
(SQL発行や、DataTable⇔DataGridのやりとりなどの処理)
ADO.NETオブジェクトを触る部分の処理は、全Formで同じ処理を行う関数もあれば、一部Formのみ処理が異なるようなこともあります。

全く同じ処理だったり、一部処理が異なる場合があるので、Formのベースクラスを作成して、その他のFormはベースFormを継承するようにしたいと考えていました。


上記の3つの関数は、どこで定義すればよいのでしょうか?
質問が上手くできなくてすいません。。。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-11 20:43
引用:

Gunsさんの書き込み (2006-01-11 20:25) より:

それでは、GUIに関すること以外のメソッドは、どこに定義するべきなのでしょうか?

A.入力された文字列の、OK/NGを判定するメソッド


例 : 検証用のクラスに static (Shared) に実装する。

引用:

B.GUIに表示するデータを作成する


例 : データを生成するクラスにメソッドを実装する。
   このメソッドは作成された結果のみを返し、Form で受け取れば良い。

引用:

C.ツールバーに関する処理(全ての画面で全く同じ表示内容/処理になります。)


例 : ツール バーを継承したコントロールを使用し、ある程度共通化を図る。

あくまで一例です。
仕様次第で継承を使うべき場合もあるでしょう。
継承を使ったとしても、抽象メソッドがあるおかげである程度柔軟性はあります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2006-01-12 10:26
継承を使っていいのは、子クラスが親クラスそのものである時だけです。
ですので、Gunsさんの初めの書き込みの
引用:

Gunsさんの書き込み (2006-01-11 17:53) より:
frmLeft,frmRightは、frmMainと見た目がほぼ同じで、同じような処理を行うことが多々あります。
上記3つに同じ処理を記述するのは効率が悪いので、frmLeftやfrmRightはfrmMainを継承するようにしたいのですが、


はだめです。frmLeftはfrmMainではないからです。
引用:

Gunsさんの書き込み (2006-01-11 20:25) より:
全く同じ処理だったり、一部処理が異なる場合があるので、Formのベースクラスを作成して、その他のFormはベースFormを継承するようにしたいと考えていました。


これはベースFormに与える意味によってはアリです。
例えばベースFormに"このプログラム内のForm"という意味を与えれば、frmLeft,frmRight,frmMainは"このプログラム内のForm"ですので、ベースFormを継承することになります。
そして、"このプログラム内のForm"が持つ機能はベースFormに書くことになります。

スキルアップ/キャリアアップ(JOB@IT)