- PR -

引数にクラスを持つことの是非(C#)

1
投稿者投稿内容
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2004-07-29 15:12
C#でバッチ処理(コンソールアプリ)を作成しています。
機能毎にクラス分けをしようと考え、以下のようにしてみました。
・main(メイン、業務処理を行う)
・Log(Debug用のログをコンソールとファイルに出力)
・ELog(イベントログを出力)
・OraAccess(DBアクセス全般)

DBアクセス時にエラーが発生した際はOraAccessクラス内で
ログを出力したいのですが、
・クラス内でLog/ELogクラスのインスタンスを作成して出力
・mainクラスからLog/Elogクラスを引数として渡す
どちらが良いのでしょうか?

要領を得ない質問かもしれませんが、ご意見を頂ければと思います。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-07-29 15:27
NAL-6295です。

あくまで、僕だったらこうするというレベルでしかありませんが・・・

要求されているように、個別のクラス内でエラーログを処理したい場合は、そのクラス内でログ出力用クラスを作成して出力します。

別のアプローチとしては・・・

OraAccessで例外及びエラーが発生した場合もmainまで例外をThrowして、ログ出力はmainのcatchのみで行うようにする。

といった感じでしょうか。
Micky
大ベテラン
会議室デビュー日: 2002/09/04
投稿数: 137
投稿日時: 2004-07-29 15:36
Mickyでございます。
お世話になっております。

どちらでもない方法を参考までに…

ログ用のクラスにSingltonパターンを適用するって方向で
いろいろと調べてみると、又違った世界が広がって
楽しいかもしれません。(^^;

更に、二つあるログクラスを管理するクラスを作成し
このクラスをSingltonとして、
出力メッセージをどちらのログ機能に渡すかを
このクラスに判断させる様な作りにするって言うのも、
更にオブジェクト指向っぽくてカッコいいかも…(^^;

とすると、渡すメッセージ自体をクラスにしちゃうなんてのも
考えられますね。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-07-29 15:44
自分なら、ログクラスをインスタンス化する必要がないのであれば、静的メソッドで実装してしまいますな。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-07-29 15:58
私なら、OraAccessクラスのインスタンスを生成するとき(またはその直後)に、既に生成してあるLog/ELogクラスのインスタンスへの参照を渡します。
OraAccessインスタンス側ではそれを保持します。

UMLで書くと、依存ではなくて関連になりますかね。

それぞれのクラスがどのような意味で作られているのかによりますが。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-29 16:28
 それぞれのクラスに「ログ出力ストリーム」を保持するフィールドを作り、それがnullなら出力しない、nullでなければメッセージを引き渡す、かな。。。


いっぱいあるなぁ。。。
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2004-07-29 18:21
Log4netを使うって方法もありますね。
これはシングルトンに含まれるかな。
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2004-07-29 18:40
皆様回答ありがとうございます。

たくさんのアイデアを頂き、非常に参考になります。
どの方法を実装しようかはまだ決めかねていますが、
今後、Log関連のクラスは他のアプリでも使えそうですし、
そういった観点でも充分に吟味していきたいと思います。
1

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