- - PR -
ListItemでDataSetを使ってマスター登録チェックを行うやり方
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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を渡すのも難しそうですし。 また、他の方法として、品番プロパティのセッターから、品番登録チェックイベン トを発行させるなどの方法なども思い浮かぶのですが、実際、皆さんならどのよう にしているのでしょうか? | ||||||||||||
|
投稿日時: 2006-05-09 19:22
生成された時点ではなく、Collection に追加された時点じゃないですか? Collection の支配下にいない場合はどうしようもないじゃないですか。
コレクション ベースならば、Add メソッドか AddRange メソッドだけでしょう? ただ、参照といえども Item に持つべきかどうかにはちょっと疑問があります。 # でも、実際にやりたいことがあまり掴めてなかったりします... (;^-^) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-05-09 19:57
確かにそうですね。Collection に追加されたときに、Collection が DataSet の 参照を Item に渡してやる、ということで「生成された時点」ではありませんで した。_(_*_)_
ややっ。 ということはItemクラスの品番プロパティのセッターでチェックさせるのではなく、 入力された時点でチェックさせる方が良いということでしょうか? | ||||||||||||
|
投稿日時: 2006-05-09 20:36
私が勘違いしている可能性はあるのですが、Item でチェックするべきものなんですか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-05-10 15:39
今までの僕なら、多分入力時点でチェックさせる方法をとっていたのです。 しかし、以下の場合はプロパティにして、セッターで値の正当性を検証し、不正な値 は排除するようにするとプロパティの値は、常に正常に保たれるという新しい考え方 を学びました。
で、考えたのですが「品番項目とは?」に関する定義をプロパティにまとめてしまう ことで、保守性が高められるのではなかろうか? で、今回の品番項目に格納できる値は「商品マスターに登録されている値か、null値 のみである」となるので、これをセッターで検証させるのが良いかな〜?、と思った 訳です。 | ||||||||||||
|
投稿日時: 2006-05-10 15:49
私はItemの品番プロパティでは、やるとしてもCodeのフォーマットチェックくらいにするかな。
Itemが作成されたタイミングじゃないですが、初めて何かしら使われたタイミングならstaticコンストラクタあたりが使えなくもないと思います。 個人的には、そこまでチェックするのはオススメしません。 | ||||||||||||
|
投稿日時: 2006-05-10 16:24
う〜む、やはりそれが自然なんでしょうね。 深く考えすぎたみたいです。 ありがとうございました。
なるほど、言われてみれば static コンストラクタというものもありましたね(^^; 普段使わないと忘れてしまう・・・ | ||||||||||||
|
投稿日時: 2006-05-10 16:48
# 先を越されましたね。(^^)
# とりあえず、勘違いしていなかったみたいで安心しています。
そうですね。 Setter での検証はそんなものにしておくべきでしょうね。 どこかでも書きましたが、メソッド (プロパティ) 内でのおせっかいは禁物ですよね。
個人的には、静的コンストラクタでの検証も違和感があります。 明示的な呼び出しによる検証の方が良いんじゃないでしょうか? 検証まで「保証」を持ち出すとキリがないように思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |