Index: [Article Count Order] [Thread]

Date:  Sat, 16 Sep 2000 11:55:38 +0900
From:  firo@....jp
Subject:  [XP-jp:00889] Re: VXP タスク3 --Confi	g
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <39C2E55B.4DDC942B@....jp>
References:  <B5E8632F.3764%khosokawa@....com>
Posted:  Sat, 16 Sep 2000 12:13:33 +0900
X-Mail-Count: 00889

矢崎です。
素モードで。。

Kaoru Hosokawaさん wrote:

> ホソカワです。
>
> on 00.9.14 8:00 PM, firo at firo@....jp wrote:
>
> > 矢崎です。続きです。
> >
> > (太郎さん)
> > 今コーヒー飲みながら次郎君から聞いたんだけれど、
> > Configファイルにある頭が「X-」で始まるものは、RFC
> > で決まっていないものということで、まあ、設定者が
> > 好きに決めれるみたい。だから、これは自由設定OKと
> > いうことで、それ専用のアクセサを作らないで、Config
> > に書いてある順番で取り出せるようにしよう(あくまでも
> > 頭が「X-」で始まるものだけ)。
>
> すみません。どうして順番に取りだせるようにするのでしょうか?フィールドごとに
> get できた方が使いやすいと思いますが…
>

私もあまり詳しくないのですが、Eメールに関するRFC(
番号とか知らないので、お詳しい方フォローしてくだされば
ありがたいです)か何かで、次のように決まっているらしいです。
(ホソカワさんがご存知のこともあるかとは思いますが、
その点はご容赦お願いします)

#それと以下の点は、私も詳しく知らない点もあり、説明の
都合上、(書き方は断定的であるにもかかわらず)想像して書
いてあるところもあります。ですから、全てを鵜呑みされないよう
ご注意お願い申し上げます。まちがい個所について、どなたか
のフォローいただければありがたいです。

ヘッダにおいては規定された情報と、そうでない情報があって
規定されていない情報は頭にX-とつけることで、それは規定外
のヘッダ情報であると、sendmailやらPOP3やらメーラやらが判断
するようです。例えば[XP-jp:00882]を、うちのネットスケープで
全ヘッダ情報表示モードで見ると、ヘッダは以下のようになって
います。(長いので省略してる部分もあります)

Received: from keith.esm.co.jp (keith.esm.co.jp [210.196.228.86])
Received: from elise.center.esm.co.jp ([172.16.0.134]) by keith.esm.co.jp
Received: from elise.center.esm.co.jp (localhost [127.0.0.1]) by elise.center.esm.co.jp
Date: Wed, 13 Sep 2000 19:48:37 +0900
Posted: Wed, 13 Sep 2000 19:49:30 +0900
From: firo <firo@....jp>
Reply-To: extremeprogramming-jp@....jp
Subject:[XP-jp:00882] VXP タスク3 --Config
To: extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id: <00Sep13.194931jst.115202@....jp>
X-ML-Name:extremeprogramming-jp
X-Mail-Count:00882
X-MLServer: fml [fml 2.1_GAMMA#185](distribute only mode)
X-ML-Info: If you have a question, please make a contact with
Mime-Version:1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding:7bit
Precedence: list
Lines:254
X-Mozilla-Status: 8001
X-Mozilla-Status2: 00000000
X-UIDL: caac309db18f5530c3d76d89ac0337ac

上の例で言えば、頭にX-がついていない識別子、つまり
Received: Date: Message-Id: などは、RFCかなにかで規定
されていて、これはそのままヘッダとして解釈されます。それ
に対して、何らかの理由でヘッダ情報を追加したい場合、でき
ない、というのではなく「X-」という識別子をつけることで、それを
ヘッダ情報として取り扱う逃げ道が用意されているようです。
ですから、ホソカワさんが仮にご自身のMLを作ったり、メーラを
開発してそれに独自のヘッダをつけたいとなった場合、
X-fogefoge(fogefogeは任意。ただし日本語が通るかどうか等は
私は不明)というものを好きなように使うことができる、、というこ
とのようです。

上記の事情から、X-fogefogeというのは、任意設定可能であり、
(fogefogeが何になるか、いくつあるか、どういう順番になるか)
そうであればアクセサを事前に決めることはできず、できるとす
ればConfigファイルから順番に取り出すことくらいではないかな
というのが私の考えです。そして、順番は、現時点では、Config
ファイルがテキストファイルであるし、わざわざ取り出し順を決める
ための番号を、その行に別に定義するのも、あまりありそうに
ないので、書いてある順に取り出せばよいのでは?と考えました。
(Configファイルの定義者にも、そういう前提があると、理解して
定義していただく)


>
> testConstructor1 は、ちょっと長いと思いましたので refactor させていただきま
> した。
>
>     public void testCorrectConfig() {
>         String correctFilename = "CorrectConfig";
>
>         createCorrectConfigFile(correctFileName);
>         Config aConfig = new Config(correctFileName);
>         assertEquals("test1", "extremeprogramming-jp", aConfig.getName());
>         // ...
>     }
>
>     private void createCorrectConfigFile(String filename) {
>         FileOutputStream fo;
>         try {
>             fo = new FileOutputStream(filename);
>         } catch (FileNotFoundException e) {
>             throw new RuntimeException("unable to open config file");
>         }
>         PrintWriter pw = new PrintWriter(fo);
>         pw.println("X-ML-Name: extremeprogramming-jp");
>         pw.println("X-Mail-Count: 00796");
>         // ...
>     }
>
> 何をテストしているのが伝わってこなかってので、名前を testCorrectConfig に変
> えました。最初に正しいコンフィグファイルを作成します。それから、テストをする
> ようにしました。
>

これは、Rename Method(メソッド名の変更)とExtract Method
(メソッドの抽出)ですね。私も必要だと思います。ありがとうござ
います。後程、太郎モードで実際にリファクタリングしてみます。
(あるいはホソカワさんが太郎さんか花子さんになって、してくだ
さっても大歓迎です^^/)

>     private void createCorrectConfigFile(filename) {
>         Config aConfig = new Config();
>         aConfig.setName("extremeprogramming-jp");
>         // ...
>         aConfig.save(filename);
>     }
>
> の様に Config にファイルに吐き出す機能を追加すればもっときれいですね。

これについては、現時点でConfigにsetNameとかsaveの機能が
必要だとまではまだ考えられていません。カウンタについては、
その必要性を示唆していますが、これについては別のタスクで
やりたいと考えいます。名前については、示唆すらもされていま
せん。ですから、YAGNIの原則からいって、seNameやsaveは、
今のところ作るべきでないと判断しています。

ただし、Self Encapsulate Field(自己カプセル化フィールド)を
適用してsetNameを作るというリファクタリングはあります。しか
し、そのリファクタリングはまだ行われていませんし、また仮に
そうしたとしてもそれはprivateメソッドになる可能性があります。

別の考えとして、テストのためにあえて作る、のは、これがXPと
してOKかどうかは、一考してもいいかもしれません。

どうなのでしょうか?

--
矢崎 博英 <firo@....jp>