- PR -

ListItemでDataSetを使ってマスター登録チェックを行うやり方

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-09 18:46
ListItem にマスター登録チェック機能を設ける場合で質問があります。

以下、詳細です。
----------------------------------------------------------------------------
品番・数量からなる Item クラスを、List<Item> で派生した Collectionクラス
で管理しようと思っています。

この際、品番の値は、データベースの商品マスターに登録されている値のみに限定
させたいと思っています。

品番の登録チェックは、型付DataSet で品番列のみを取り込んで Find しようと
思っています。
----------------------------------------------------------------------------
以上を実現するやり方で、単純に僕が良いと思うのは、 Item クラスの 品番プロパ
ティのセッターに品番登録チェックを置く方法です。
但し、DataSet をItemごとに持つわけにはいかないので、コレクションクラスを生
成したときに、DataSet を生成して品番情報を取得し、Itemオブジェクトが生成さ
れた時点で、DataSet の参照を渡し、この参照を使って品番プロパティのセッター
でFind させれば良いと思ったのです。

しかし「Itemオブジェクトが生成された時点で DataSet の参照を渡すやり方」がわ
かりません。
Addメソッドを置き換えて、DataSet を渡せば良いのかな〜、とも思うのですが、今
ひとつ自身が無いです。
Addメソッド以外にも、DataSet を登録させるメソッドがありそうで、これらを全て
捕まえてDataSetを渡すのも難しそうですし。

また、他の方法として、品番プロパティのセッターから、品番登録チェックイベン
トを発行させるなどの方法なども思い浮かぶのですが、実際、皆さんならどのよう
にしているのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-09 19:22
引用:

R・田中一郎さんの書き込み (2006-05-09 18:46) より:

しかし「Itemオブジェクトが生成された時点で DataSet の参照を渡すやり方」がわかりません。


生成された時点ではなく、Collection に追加された時点じゃないですか?
Collection の支配下にいない場合はどうしようもないじゃないですか。

引用:

Addメソッドを置き換えて、DataSet を渡せば良いのかな〜、とも思うのですが、今
ひとつ自身が無いです。
Addメソッド以外にも、DataSet を登録させるメソッドがありそうで、これらを全て
捕まえてDataSetを渡すのも難しそうですし。


コレクション ベースならば、Add メソッドか AddRange メソッドだけでしょう?
ただ、参照といえども Item に持つべきかどうかにはちょっと疑問があります。

# でも、実際にやりたいことがあまり掴めてなかったりします... (;^-^)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-09 19:57
引用:

じゃんぬねっとさんの書き込み (2006-05-09 19:22) より:
引用:

R・田中一郎さんの書き込み (2006-05-09 18:46) より:

しかし「Itemオブジェクトが生成された時点で DataSet の参照を渡すやり方」がわかりません。


生成された時点ではなく、Collection に追加された時点じゃないですか?
Collection の支配下にいない場合はどうしようもないじゃないですか。


確かにそうですね。Collection に追加されたときに、Collection が DataSet の
参照を Item に渡してやる、ということで「生成された時点」ではありませんで
した。_(_*_)_

引用:

じゃんぬねっとさんの書き込み (2006-05-09 19:22) より:

ただ、参照といえども Item に持つべきかどうかにはちょっと疑問があります。



ややっ。
ということはItemクラスの品番プロパティのセッターでチェックさせるのではなく、
入力された時点でチェックさせる方が良いということでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-09 20:36
引用:

R・田中一郎さんの書き込み (2006-05-09 19:57) より:

ということはItemクラスの品番プロパティのセッターでチェックさせるのではなく、
入力された時点でチェックさせる方が良いということでしょうか?


私が勘違いしている可能性はあるのですが、Item でチェックするべきものなんですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-10 15:39
引用:

じゃんぬねっとさんの書き込み (2006-05-09 20:36) より:
引用:

R・田中一郎さんの書き込み (2006-05-09 19:57) より:

ということはItemクラスの品番プロパティのセッターでチェックさせるのではなく、
入力された時点でチェックさせる方が良いということでしょうか?


私が勘違いしている可能性はあるのですが、Item でチェックするべきものなんですか?



今までの僕なら、多分入力時点でチェックさせる方法をとっていたのです。
しかし、以下の場合はプロパティにして、セッターで値の正当性を検証し、不正な値
は排除するようにするとプロパティの値は、常に正常に保たれるという新しい考え方
を学びました。

コード:
    public string Code;    //品番項目
    public string Amount;  //金額



で、考えたのですが「品番項目とは?」に関する定義をプロパティにまとめてしまう
ことで、保守性が高められるのではなかろうか?
で、今回の品番項目に格納できる値は「商品マスターに登録されている値か、null値
のみである」となるので、これをセッターで検証させるのが良いかな〜?、と思った
訳です。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-05-10 15:49
私はItemの品番プロパティでは、やるとしてもCodeのフォーマットチェックくらいにするかな。

Itemが作成されたタイミングじゃないですが、初めて何かしら使われたタイミングならstaticコンストラクタあたりが使えなくもないと思います。

個人的には、そこまでチェックするのはオススメしません。

R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-10 16:24
引用:

Kazukiさんの書き込み (2006-05-10 15:49) より:

私はItemの品番プロパティでは、やるとしてもCodeのフォーマットチェックくらいにするかな。



う〜む、やはりそれが自然なんでしょうね。
深く考えすぎたみたいです。
ありがとうございました。

引用:

Kazukiさんの書き込み (2006-05-10 15:49) より:

Itemが作成されたタイミングじゃないですが、初めて何かしら使われたタイミングならstaticコンストラクタあたりが使えなくもないと思います。



なるほど、言われてみれば static コンストラクタというものもありましたね(^^;
普段使わないと忘れてしまう・・・
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-10 16:48
# 先を越されましたね。(^^)
# とりあえず、勘違いしていなかったみたいで安心しています。

引用:

Kazukiさんの書き込み (2006-05-10 15:49) より:

私はItemの品番プロパティでは、やるとしてもCodeのフォーマットチェックくらいにするかな。


そうですね。

Setter での検証はそんなものにしておくべきでしょうね。
どこかでも書きましたが、メソッド (プロパティ) 内でのおせっかいは禁物ですよね。

引用:

R・田中一郎さんの書き込み (2006-05-10 16:24) より:

なるほど、言われてみれば static コンストラクタというものもありましたね(^^;
普段使わないと忘れてしまう・・・


個人的には、静的コンストラクタでの検証も違和感があります。
明示的な呼び出しによる検証の方が良いんじゃないでしょうか?

検証まで「保証」を持ち出すとキリがないように思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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