Index: [Article Count Order] [Thread]

Date:  Sat, 16 Sep 2000 23:25:50 +0900
From:  Kaoru Hosokawa <khosokawa@....com>
Subject:  [XP-jp:00894] VXP Exception Was:Re: VXP 	タスク3  --Config
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <B5E9B188.37C5%khosokawa@....com>
In-Reply-To:  <39C2D4A0.51E93943@....jp>
Posted:  Sat, 16 Sep 2000 23:23:53 +0900
X-Mail-Count: 00894

ホソカワです。

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