ホソカワです。
on 00.9.16 10:44 AM, firo@....jp at firo@....jp wrote:
> 矢崎です。
>
> (太郎さん)
> え、次郎くん、何?あ、花子さんが何かやってたって?
> ああ、戻ってきてコードみてくれてたんだね。うん、サンキュー。
>
> じゃあ、ちょっと見てみますか。
>
>
> コンストラクタをリファクタリングしてくれたんだ。だいぶ見通し
> がよくなったぞ。ところでコンパイル、テストはしてくれたのかな。
> ちょっと、確認でやっておこう。
>
> コンパイルはOK。次はテスト実行っと。
>
> ありゃ、testConstructor1は通らないのは、これは
> getMemberListFileName()をまだちゃんと書いてないからだけれ
> ど、testConstructor2も通らなくなっているぞ。Why?
>
> あ、Config.javaのコンストラクタの
>
>> } catch (FileNotFoundException e) {
>> // What is exception handling carried out?
>
> で何もやってないからか。。ははあ、これは例外処理について、き
> ちんとつめましょう、っていう花子さんからのメッセージだな。
>
> うーん。例外処理って結構なやむところなんだけれど、何か
> いいイデオムとか、どなたかご存知じゃないかな?
>
> 例えば自分なら次のように考えるけど、、、
>
> FileNotFoundException とかIOExceptionとかをそのまま
> 投げるとすると、受け取ったほうでは何が起きたか直接
> 的な情報が得られるし、ユーザ定義(つまり自分達で新
> たに作る)の例外クラスがやたらと増えないので、楽といえば
> 楽。でも、太郎としては、Configがファイルに書いてあると
> いうことは、これはいくつかある実現手段の1つにしかす
> ぎず、もしかしたら将来(この将来とは次のイテレーション
> かもしれない)、別の方法をとるべきときがくるかもしれな
> いと考える。ConfigがRDBに書いてあってもいいし、別のサーバ
> からソケット通信で受け取るという手段も(現実には考え
> づらいが)あるかもしれない。
>
> と考えると、Config自身は、責務としてConfigの取得につい
> て、生に近い処理(ファイル OR RDB OR ソケット etc)をす
> るのはやむを得ないとしても、Configを利用するほうに、その
> 生の姿が見えないほうがいいんじゃないかな?これは投げら
> れる(受け取る)例外についてもしかり、どんな生処理の結果
> の例外かを予想させない例外を投げたほうがいいような気も
> する。そのためにはVXPとして独自のExceptionを用意したほ
> うがいいのだろうか?
>
> と、とりとめもないことを考えてみたけど、本当、よくわからな
> いんだ、例外って。ちょっと他の人にも意見聞いてみたいの
> でタスクカードを起こすね。
>
> ・・・
> (タスクカード)
> VXPとして例外をどうするか、方針を決める。(教えて^^!
> ・・・
extremedomoを使うユーザーの立場になって考えてみました。なにか config にエラー
が起きた時、どこが悪いのかシステムが教えてくれないとダメでしょう。この場合は、
「コンフィグファイルそのものが変である」ことを伝えてもらうぐらいでいいのでは
ないでしょうか?つまり、
class BadConfigFileException extends Exception { }
public class Config {
public Config(String nameOfConfigFile) throws BadConfigFileException {
try {
bufIn = new BufferedReader(new FileReader(nameOfConfigFile));
// ...
} catch (IOException e) {
throw new BadConfigFileException();
}
}
// ...
}
の様になります。
でも、テストの方は、fail するだけでいいのではないでしょうか?
public class ConfigTest extends Testcase {
// ...
private void createCorrectConfigFile(String filename) {
FileOutputStream fo;
try {
fo = new FileOutputStream(filename);
} catch (IOException e) {
fail("Could not new FileOutputStream(filename)");
}
// ...
}
// ...
}
#ユーザーには親切に、プログラマーには、厳しく?
--
Kaoru Hosokawa
khosokawa@....com