[seasar-javadoc:147] Re: ArgDef

Koichi Kobayashi koichik @ improvement.jp
2006年 6月 1日 (木) 02:00:23 JST


小林 (koichik) です.

Date:    Thu, 1 Jun 2006 00:56:30 +0900
From:    "Makoto Yonezawa" <stratosphire @ gmail.com>
To:      seasar-javadoc @ ml.seasar.org
Subject: [seasar-javadoc:142] Re: ArgDef

> まだ、このインターフェース全体概要がかけてないっというか、
> どう説明したらいいかまだ分かっていないです。

苦戦してますね.(^^;

まず,このインタフェースが何を表現しているかを
考えましょう.
名前が ArgDef ですから,Arg の定義です.
そして Arg は Argument の略で,これは引数を意味する場合が
多いです.
何の引数かというと,

<component>
  <arg>〜</arg>
</component>

の場合はコンストラクタの引数であり,

<component>
  <initMethod name="">
    <arg>〜</arg>
  </initMethod>
</component>

の場合はメソッドの引数です.

そんなわけで (どんなわけで?),Javadoc の出だしは

 * コンポーネントのコンストラクタまたはメソッドに与えられる引数の定義です。

あたりでどうでしょう?
ちょっと一文が長い気のせいがしますが.


getValue() について

>      * オブジェクトグラフから取得したOGNL式を評価した値を取得します。

かなり微妙.
「オブジェクトグラフから取得した」は結果としてそうなる
場合もありますが,ここでは不適切です.
理由の一つは必ずしもオブジェクトグラフから取得されるとは
限らないため.
例えば

<arg>1</arg>

この場合は 1 というリテラルが評価されるだけで終わりです.
もう一つは「オブジェクトグラフ」がどこに存在するどんな
オブジェクトグラフなのかが曖昧なことです.
「メモリから取得した」くらい曖昧です.

それから,get〜() は「〜を返します」にしましょう.

では,getValue() は何を返すのでしょうか?
ArgDef というインタフェースが表現するのは引数で,
getValue() はその値なわけですから,

 * この引数定義の値を返します。

といったところでどうでしょう?
「この」というのは ArgDef を実装したクラスのインスタンスのこと.
setValue() も同様で.


getContainer() について.

     * オブジェクトグラフからS2コンテナを取得します。

これも違います.
ここで返ってくる S2コンテナとはどういうものでしょうか?

<component name="foo" class="..."/>

<component name="bar">
  <arg>foo</arg>
</component>

とあった場合,bar のコンストラクタに与えられる引数は
foo という式を評価した結果で,明らかに foo という名前を
付けられたコンポーネントになるはずです.

この foo はどこから入手するのでしょうか?
もちろん S2 コンテナです.

どの S2 コンテナでしょうか?
<arg> を定義している <component> を所有しているコンテナです.
このコンテナが引数を評価するコンテキストとなります.
そのコンテナを返すのが getContainer() です.

そんなわけで (どんなわけで?),

 * この引数を評価するコンテキストとなるS2コンテナを返します。

そしてこのコンテナを外から与えてもらうためのメソッドが
setContainer().


getExpression()

     * オブジェクトグラフからOGNL式を取得します。

まず,Expression は OGNL 式とは限りません.
Expression が OgnlExpression という実装クラスの
インスタンスなら OGNL 式ですが,それ以外の Expression も
あり得ます.

次に,Expression は ArgDef の単なるプロパティであり,
どこかから探し出して返してくるわけではありません.
少し ArgDefImpl の実装を見るといいかも.


ともあれ (JW),最初からスイスイとはいかないのが
普通だと思います.
頑張って♪


-- 
<signature>
    <name>Koichi Kobayashi</name>
    <e-mail>koichik @ improvement.jp</e-mail>
</signature>



seasar-javadoc メーリングリストの案内