- - PR -
引数にクラスを持つことの是非(C#)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-07-29 15:12
C#でバッチ処理(コンソールアプリ)を作成しています。
機能毎にクラス分けをしようと考え、以下のようにしてみました。 ・main(メイン、業務処理を行う) ・Log(Debug用のログをコンソールとファイルに出力) ・ELog(イベントログを出力) ・OraAccess(DBアクセス全般) DBアクセス時にエラーが発生した際はOraAccessクラス内で ログを出力したいのですが、 ・クラス内でLog/ELogクラスのインスタンスを作成して出力 ・mainクラスからLog/Elogクラスを引数として渡す どちらが良いのでしょうか? 要領を得ない質問かもしれませんが、ご意見を頂ければと思います。 |
|
投稿日時: 2004-07-29 15:27
NAL-6295です。
あくまで、僕だったらこうするというレベルでしかありませんが・・・ 要求されているように、個別のクラス内でエラーログを処理したい場合は、そのクラス内でログ出力用クラスを作成して出力します。 別のアプローチとしては・・・ OraAccessで例外及びエラーが発生した場合もmainまで例外をThrowして、ログ出力はmainのcatchのみで行うようにする。 といった感じでしょうか。 |
|
投稿日時: 2004-07-29 15:36
Mickyでございます。
お世話になっております。 どちらでもない方法を参考までに… ログ用のクラスにSingltonパターンを適用するって方向で いろいろと調べてみると、又違った世界が広がって 楽しいかもしれません。(^^; 更に、二つあるログクラスを管理するクラスを作成し このクラスをSingltonとして、 出力メッセージをどちらのログ機能に渡すかを このクラスに判断させる様な作りにするって言うのも、 更にオブジェクト指向っぽくてカッコいいかも…(^^; とすると、渡すメッセージ自体をクラスにしちゃうなんてのも 考えられますね。 |
|
投稿日時: 2004-07-29 15:44
自分なら、ログクラスをインスタンス化する必要がないのであれば、静的メソッドで実装してしまいますな。
|
|
投稿日時: 2004-07-29 15:58
私なら、OraAccessクラスのインスタンスを生成するとき(またはその直後)に、既に生成してあるLog/ELogクラスのインスタンスへの参照を渡します。
OraAccessインスタンス側ではそれを保持します。 UMLで書くと、依存ではなくて関連になりますかね。 それぞれのクラスがどのような意味で作られているのかによりますが。 |
|
投稿日時: 2004-07-29 16:28
それぞれのクラスに「ログ出力ストリーム」を保持するフィールドを作り、それがnullなら出力しない、nullでなければメッセージを引き渡す、かな。。。
いっぱいあるなぁ。。。 |
|
投稿日時: 2004-07-29 18:21
Log4netを使うって方法もありますね。
これはシングルトンに含まれるかな。 |
|
投稿日時: 2004-07-29 18:40
皆様回答ありがとうございます。
たくさんのアイデアを頂き、非常に参考になります。 どの方法を実装しようかはまだ決めかねていますが、 今後、Log関連のクラスは他のアプリでも使えそうですし、 そういった観点でも充分に吟味していきたいと思います。 |
1