[seasar-javadoc:542] Re: S2Container

Koichi Kobayashi koichik @ improvement.jp
2006年 9月 1日 (金) 03:30:25 JST


小林 (koichik) です.

Date:    Mon, 28 Aug 2006 14:42:41 +0900
From:    "Jundo Ishikawa" <jundo.ishikawa @ gmail.com>
To:      seasar-javadoc @ ml.seasar.org
Subject: [seasar-javadoc:526] Re: S2Container

> ■findComponents、findAllComponents、findLocalComponents
>  戻り値の説明が長い気がします。キーが文字列か否かで動作が変わるのはパラメー
> タか全体の説明のような気がするので、概要側にもっていってはどうでしょうか?
> findComponentsに近くなると思います。
> 
>  その上で、戻り値の説明は「見つかったコンポーネントの配列。見つからなかった
> 場合は長さ0の配列を返す。」というのでいかがでしょうか。

そうですね,その方がスッキリかも.
find〜Defs() ともども御意.

> ■injectDependency(Object outerComponent, Class componentClass)
>  同じinjectDependencyでも、これにだけ「クラス名をキーとして、適合するコンポー
> ネントを見つけます。」という記述があるのが、ちょっとだけ気になりました。

injectDependency(Object, String) には

     * コンポーネント名をキーとして、適合するコンポーネントを見つけます。

という記述があるので,むしろ injectDependency(Object) にだけ
該当する記述がないことになります.

> クラ
> ス名がcomponentClass.getName()であれば、そういう実装はされていない気もします。

ちょっと意味が分かりませんでした.
injectDependency(Object, Class) は本当にクラスをキーとして
コンポーネント定義を探します.
っていうか問題の記述は「コンポーネントを見つけます」ではなくて,
「コンポーネント定義を見つけます」が正しいですね.

>  この1文は無くても問題ないと思うのですがどうでしょう?

そうですねぇ.実質,最初の

     * <code>componentClass</code>をキーとして登録された
     * {@link ComponentDef コンポーネント定義}に従って、必要なコンポーネントのインジェクションを実行します。

で説明されているので,削除してもいいかもしれません.

> ■register
>  同じメソッド名でコンポーネントとコンポーネント定義の登録があるので、登録さ
> れたコンポーネントやコンポーネント定義がどうなるのかが書いてあると、区別が付
> けやすく、何のためにあるのかが分かってよいような気がします。
> 
>  例えば、register(Object component)であれば、「指定されたオブジェクトを、コ
> ンポーネントとしてS2コンテナ上に無名で登録します。登録されたコンポーネント自
> 身は、インジェクションやアスペクトの適用などは出来ません。ただし、他のコンポー
> ネントの構築時に依存オブジェクトとして利用されます。」

そうですね.
register(Class) なんかは定義リストでコンポーネントがどのように
登録されるか書いてあるので,register(Object) でも説明があった方が
いいですね.

> # それにしても、registerって同じメソッド名でコンポーネントを登録したりコンポー
> # ネント定義を登録したりと紛らわしいのですね(^^;;

コンポーネントを登録するというのは,それを (デフォルトの)
コンポーネント定義に包んで登録するだけです.
クラスを登録するというのも同じです.
コンポーネント定義を登録するというのがベースとなる操作で,
その他は簡易メソッドというかユーティリティに過ぎません.

> ■その他全般
>  find〜系が対象とするS2コンテナの範囲が難しいため、他のメソッドも対象範囲が
> 分からなくなってきました。そのため、例えばfind〜系の範囲だけが特殊であればク
> ラスがいよう部分に一般的な範囲とfind〜系だけが特殊であることを、メソッドごと
> に範囲のバラツキが大きいようであれば全てのメソッドの説明に対象となるS2コンテ
> ナを記述するとよいと思いました。

なるほど.
実のところ,getComponent() や getComponentDef() などの対象範囲は
一番複雑な findComponents() や findComponentDefs() と同じです.
injectDependency() も同じ.
findAll〜() と findLocal〜() が特殊です.

そんなわけで (どんなわけで?),基本となるケースについて
クラスコメントに説明するのはありですね.
ただし,メソッドコメントにも説明があっていいと思います.
クラスコメントを読み飛ばしてメソッドの説明だけ見ちゃう人もいると思うので.



-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"koichik @ improvement.jp"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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