- - PR -
基本クラスが同じ違うクラスを一つのクラスで使い分ける方法
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-03 19:41
マスターテーブルのレコードを操作するためのクラスが3つあります。
取引先マスターレコード操作 商品マスターレコード操作 社員マスターレコード操作 基本クラスは全て「レコード操作」で統一されています。 実装しているプロパティもメソッドも全て同じです。 現在、3つの異なるレコード操作クラスがあるため、全く同じ動作をする編集クラ スも各マスター分用意しています。
更新、削除の前後に、だらだらと事前チェックが大量に書かれています。 しかし、全く同じ動作をするので、一つにまとめて、だらだらするのを辞めたいの です。 こんな感じで
こんなことを実現する方法ってありますか? [ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-03-03 19:45 ] | ||||||||||||||||
|
投稿日時: 2006-03-03 20:05
レコード操作クラスを継承した、3つの○○レコード操作クラスがある。
というような情報を読み取って行ったんですが、読み進めていくと、コードの中に商品マスタークラスとか編集クラスなどというのが前提なしにポンポン出てくるので、ちょっとR・田中一郎さんが伝えたいことが読み取れません。 もう一回説明してもらっていいですか。 | ||||||||||||||||
|
投稿日時: 2006-03-03 20:07
良くわからなかったので、勘違いしているかもしれません。
同じようなレコードを操作するとはいえ、対象のテーブルが違う以上は、 "全く同じメソッド" でというのは、プログラムで対応する問題じゃないように思えます。 それはテーブル設計次第になっちゃいますからね。 無理せずインターフェースを使って、多態性を持たせてはいかがでしょうか? メソッド名と役割は同じであることを明示化しておくということです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-03-03 20:18
上記のメソッドを実装したマスターテーブルクラスです。 この基本クラスを元に、上記のメソッドのみをオーバーライドした各マスターごと の○○レコード操作クラスがいます。 クラスを分けているのは、これらの違いを一本化することができなかったため、や むなくやっているだけで、実際には別々のクラスでなくても良いのです。
ちなみに編集クラスは、ソースコードレベルでは全く同じです。 [ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-03-03 20:21 ] | ||||||||||||||||
|
投稿日時: 2006-03-03 20:41
「一本化」したいのは「レコード操作クラス」ではなく、「マスタテーブルクラス」なんですよね?
編集クラスとやらにすべての操作を実装し、編集クラスのコンストラクタに各操作クラスの インスタンスを渡すようにすればいいように思いますが。 | ||||||||||||||||
|
投稿日時: 2006-03-03 20:48
どうも読み違えをしていたようですね。(;^-^)
単純に、この「だらだらの部分」を、メソッドとして Extract しちゃダメなんですか? 同じパラメータであるのであれば、基底クラスに検証メソッドを用意して、
こんな感じで...
コンストラクタで?? というのが、未だにわかってなかったり... (; ̄- ̄) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-03-03 22:25
どういう構造になってるのかまだわからないです。
編集クラスって何ですか?? 一度1つの投稿でまとめて説明お願いします。 私もじゃんぬさんが書かれているようにメソッドに 括りだします。 もっと広い範囲で使えるチェックロジックなら
ってな具合なクラスを作っておいて,だらだらした部分に これを使ったコードを書きます。 | ||||||||||||||||
|
投稿日時: 2006-03-03 23:37
全く同じ構造のマスタテーブルを作って、テーブル名だけ変えて対応しています。
列の追加がある場合は、拡張。 今日、MVP for SQL Server な河端さん(川だったら失礼)とお話をしているときに、「O-R マッピングをして、1レコードを追加するのに、Adapter が便利だから Fill で全部持ってきて、1行追加して、Update している。何でそんな効率の悪いことするの?!」って話が出ました。すみません、酔っぱらって、あまり覚えてないです。 ソースコードの効率も大事ですが、実行時の効率も大事じゃないでしょうか。そういうところも考えて、もう一度設計を見直してみてはいかがでしょうか。 |
1|2|3
次のページへ»