- - PR -
フォーム上の値のチェック
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-18 11:37
皆様、こんにちは。
いつも参考にさせていただいています。 VS2005(VB.NET)でWindowsアプリを開発しています。 今回お伺いしたいのは、 フォーム上の値のチェックについてなのですが、 単純なものなら、プロパティにSetする際にチェックをかけているのですが、 今回はチェックする数や深さがあるので、どうすべきか考えています。 今思いつくのは、 プロパティばかり増やしてもよくないと思いますので、 チェックのメソッドをクラスに実装して、せめてFormの記述や本筋のメソッド だけはすっきりしたものにしようというレベルのものなのですが。 よい方法をご存知の方がいらっしゃれば、ご教授ください。 | ||||||||||||
|
投稿日時: 2007-06-18 12:21
以下の過去ログをあされば、幸せになれるかもしれません。
http://www.atmarkit.co.jp/fdotnet/index/bbs/dir118.html | ||||||||||||
|
投稿日時: 2007-06-18 16:57
かずくんさん、レスありがとうございます。
ただ、紹介していただいたサイト(”チェック”での検索結果?) には、よいものが見つかりませんでした。 私が思うには、 フォーム上のコントロールの値チェックぐらいならば、 プロパティでできると思うのですが、 複数のコントロールの組み合わせでDBのマスタを見て、 その戻り値によって、さらに別のコントロールの値をチェックして・・・ などと行うようなチェックは、 どのようにクラスを設計するか? というような問題だと思うのです。 間違っていたらごめんなさい・・・。 ただ、設計のあたりになると経験も ないので、かなり難しく感じています。 | ||||||||||||
|
投稿日時: 2007-06-18 17:23
まずは「コントロール」などフォームに関わる部分は忘れてください。 そして業務(項目)=仕様として考えてください。 Public Shared Function ValidateNenkinBango(ByVal NenkinBango As String) As Boolean 年金番号を受け取り妥当性を検証するわけですが、ポイントは上記の「年金番号」が値(概念)であることです。 そこに「コントロール」という存在が無いですよね。 まずはそのレベルでいわゆる末端の業務クラスをそろえましょう。 #ポイントは「どう使われるか」ではなく、「自分(年金番号)とは何か(何が必要か)」です。 最終的にフォームではそれらを呼び出すだけになります。 #フォームに書く程度の処理か、クラスにすべきか、は別の議論になります。 | ||||||||||||
|
投稿日時: 2007-06-18 18:17
この部分なのですが、具体的にどういうクラス設計になっているのでしょうか? (1) プロパティはフォームクラスのプロパティですか? あるいは別のクラスですか? (2) プロパティのセッターで、エラーがあった場合に 何をしていますか?(例外をスローするとか) できればコードのサンプルを提示頂ければと思います。 どこでつまずいているのかが、いまいちわかりません。 | ||||||||||||
|
投稿日時: 2007-06-18 18:18
まどかさん、レスありがとうございます。
つまりオブジェクト指向らしくモノ・コトを定義することからはじめなさい、ということでしょうか。 私のいつも行う設計ですと、 クラス : 年金手帳 メンバ変数 : 年金番号、氏名、住所、生年月日、性別 メソッド : 有効かどうかチェックする() というようにしています。 そして、今回の質問の主旨としましては、 東京都の男性の場合や、 大阪府の30歳以上などの組み合わせで、 内部の処理を変えたい場合はどのような方法があるかというものです。 私が思いつくのは、 東京都の男性()、大阪府30歳以上() などというメソッドをクラスに追加する、 というものなのですが、もっとよい方法があればご教授いただきたいのです。 | ||||||||||||
|
投稿日時: 2007-06-18 18:36
単純なものかどうかは関係ないですね。プロパティで検証すべきことは、プロパティで渡された引数が仕様外かどうかの一点です。仕様外であれば、業務続行不可能なので例外をスローするのが基本的なガイドラインでしょう。それ以外のチェックは直感的でないため行うべきではありません。 さて、一般的なアプリケーションでの検証処理は大きく 2 つに分けられます。
1. であれば、Validating イベントを利用します。(ErrorProvider などと併用するのが個人的に好きです) 2. であれば、まどかさんの仰るとおり Control とは無関係の場所で検証して頂いて構いません。Control ではなくて Control が示す値 (Text プロパティ) を検証したいのですから当然です。 このあたりの実装箇所は仕様次第です。たとえば、データクラスの中にデータを保持しているのであれば、そのデータクラス内で検証も解決すべきです。簡単なアプリケーションであれば、Form 内に Static な検証メソッドを用意するというのも強ち間違いだとは言えません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-06-19 08:46
KIさん、レスありがとうございます。
まだ、クラス設計は行っていません。 設計段階で考えているところです。 じゃんぬねっとさん、レスありがとうございます。
・確かに。プロパティであれこれと検証していると、直感的ではないと感じます。大変参考になりました。
どのように実装していくか。 この部分がいまいちピンとこないのです。クラスを作って、メンバ変数とメソッドを作って、抽象クラスを作って、継承して、オーバーライドして。 だけど、もっといいやり方があるんじゃないか、と。 設計や実装について、参考になるサイトや書籍があれば紹介していただけないでしょうか。このあたりが科学的でおもしろい部分なのですが、実現が難しいとも感じています。 最後に、じゃんぬさんのおっしゃっているデータクラスとは、どのようなものですか? データセットやデータテーブルのお話でしょうか。 |