[seasar-javadoc:553] Re: S2Container

Makoto Yonezawa stratosphire @ gmail.com
2006年 9月 6日 (水) 03:13:02 JST


また風邪をひきそーな米澤です。
早く正常な生活が取り戻したいです--;


JUNDOさん、小林さんからのコメントから修正したメソッドコメントと、
クラスコメントを少し書いてみました。
というか、やはり、クラスコメント難航しそうです(+_+
なんかまだ整理ができていないためか、どうかいていいやら・・・
つっこみのほどお願いします。

■戻り値の修正
findComponents

    /**
     * 指定されたキーに対応する複数のコンポーネントを検索して返します。
     * <P>
     * 検索の範囲は現在のS2コンテナおよび、インクルードしているS2コンテナの階層全体です。
     * キーに対応するコンポーネントが最初に見つかったS2コンテナを対象とします。
     * このS2コンテナから,キーに対応する全てのコンポーネントを配列で返します。
     * 返される配列に含まれるコンポーネントは全て同一のS2コンテナに登録されたものです。
     * </P>
     *
     * @param componentKey
     *        コンポーネントを取得するためのキー
     * @return
     *        キーに対応するコンポーネントの配列を返します。
     *        キーに対応するコンポーネントが存在しない場合は長さ0の配列を返します。
     * @throws CyclicReferenceRuntimeException
     *        コンストラクター・インジェクションでコンポーネントの参照が循環している場合
     * @see #findAllComponents
     * @see #findLocalComponents
     */
    Object[] findComponents(Object componentKey)
            throws CyclicReferenceRuntimeException;

findAllComponents
findLocalComponents
も同様に修正。


findComponentDefs

    /**
     * 指定されたキーに対応する複数のコンポーネント定義を検索して返します。
     * <P>
     * 検索の範囲は現在のS2コンテナおよび、インクルードしているS2コンテナの階層全体です。
     * キーに対応するコンポーネントが最初に見つかったS2コンテナを対象とします。
     * このS2コンテナから,キーに対応する全てのコンポーネント定義を配列で返します。
     * 返される配列に含まれるコンポーネント定義は全て同一のS2コンテナに登録されたものです。
     * </P>
     *
     * @param componentKey
     *        コンポーネント定義を取得するためのキー
     * @return
     *        キーに対応するコンポーネント定義の配列を返します。
     *        キーに対応するコンポーネント定義が存在しない場合は長さ0の配列を返します。
     * @see #findAllComponentDefs
     * @see #findLocalComponentDefs
     */
    ComponentDef[] findComponentDefs(Object componentKey);


findAllComponents
findLocalComponents
も同様に修正。



■インジェクションの修正

    /**
     * <code>componentClass</code>をキーとして登録された
     * {@link ComponentDef コンポーネント定義}に従って、必要なコンポーネントのインジェクションを実行します。
     * アスペクト、コンストラクタ・インジェクションは適用できません。
     * <P>
     * {@link ComponentDef コンポーネント定義}の{@link InstanceDef インスタンス定義}は
     * {@link InstanceDef#OUTER_NAME outer}でなくてはなりません。
     * </P>
     * @param outerComponent 外部コンポーネント
     * @param componentClass コンポーネント定義のキー (クラス)
     * @throws ClassUnmatchRuntimeException 適合するコンポーネント定義が見つからない場合
     */
    void injectDependency(Object outerComponent, Class componentClass)
            throws ClassUnmatchRuntimeException;


injectDependency(Object outerComponent, String componentName)
injectDependency(Object outerComponent)
も同様にコンポーネント定義を見つけるくだりを削除しました。


■register(Object)

    /**
     * コンポーネントを登録します。
     * <P>
     * S2コンテナに無名のコンポーネントとして登録します。
     * 登録されたコンポーネントはインジェクションやアスペクトの適用などは出来ません。
     * 他のコンポーネント構築時に依存オブジェクトとして利用することが可能です。
     * </P>
     *
     * @param component コンポーネント
     */
    void register(Object component);

register(Object component, String componentName)
こちらのコメントがさびしくなりました--;
なにか付け加えた方がいいですか?


■クラスコメント
2つの話。(コンテナのコンポーネントの扱い、コンテナ階層について)
*コンテナのコンポーネントの扱い
コンテナがコンポーネント定義に従って、コンポーネントの生成、初期化を行います。
コンポーネントはコンテナ内に保持されます。
必要に応じて利用したいコンポーネントを取得します。

ここから先どんな風にかいたらいいですか?
というか、そもそもこのくだりでいいですか?
コンポーネント(定義)の検索についても触れなければいけないだろうし、
インジェクションの種類にも触れた方がいいですよね・・・
うう、困りました。




06/09/01 に Makoto Yonezawa<stratosphire @ gmail.com> さんは書きました:
> 米澤です。
>
> Jundoさん、小林さん、コメントありがとうございます。
> まずはお二人の意見をメソッドコメントにFBしてから、
> またクラスコメントをすこしずつ書いていきたいと思います。
>
> まだもう少し道のりが長いかも知れないですが、よろしくお願いしますm_ _m
>
>
> 06/09/01 に Koichi Kobayashi<koichik @ improvement.jp> さんは書きました:
> > 小林 (koichik) です.
> >
> > Date:    Mon, 28 Aug 2006 10:12:11 +0900
> > From:    "Makoto Yonezawa" <stratosphire @ gmail.com>
> > To:      seasar-javadoc @ ml.seasar.org
> > Subject: [seasar-javadoc:524] Re: S2Container
> >
> > > まずは、メソッドコメントをすべて書いたものを添付します。
> > >
> > > 長いですが、確認お願いします。
> >
> > ありがとうございました.
> > こちらについては Jundo さんのレスにコメントします.
> > 個人的にはいい感じになったと思います.
> >
> > 以下はクラスコメントについて.
> >
> >
> > > それとクラスコメントですが、
> > > もう一度メソッドを整理すると、
> > >
> > > コンポーネントを取得
> > >     getComponent
> > > コンポーネントを検索
> > >     findComponents
> > >     findAllComponents
> > >     findLocalComponents
> > > コンポーネント定義を取得
> > >     getComponentDefSize
> > >     getComponentDef
> > > コンポーネント定義を検索
> > >     findComponentDefs
> > >     findAllComponentDefs
> > >     findLocalComponentDefs
> > >     hasComponentDef
> > > コンポーネントの登録
> > >     register
> >
> > ここまでと
> >
> > > DIする(依存性の注入)=メソッドの実行?
> > >     injectDependency
> >
> > が DI コンテナとしての基本的な機能というか,コンポーネントを
> > 扱うためのインタフェースですね.
> > そして,
> >
> > > コンテナのお世話
> > >     hasDescendant
> > >     getDescendant
> > >     registerDescendant
> > >     include
> > >     getChildSize
> > >     getChild
> > >     getParentSize
> > >     getParent
> > >     addParent
> > >     init
> > >     destroy
> > >     getRoot
> > >     setRoot
> > > 名前空間について
> > >     getNamespace
> > >     setNamespace
> > >     getPath
> > >     setPath
> > > 外部コンテキストについて
> > >     getExternalContext
> > >     setExternalContext
> > >     getExternalContextComponentDefRegister
> > >     setExternalContextComponentDefRegister
> > > クラスローダー
> > >     getClassLoader
> > >     setClassLoader
> > > マップ
> > >     registerMap
> >
> > この辺は全部ひっくるめて「コンテナのお世話」でいいかも.
> > コンポーネントではなく,コンテナ自身あるいはコンテナの階層を
> > 扱うためのインタフェースです.
> >
> > もし分けるなら,階層に関わるかどうかで
> >
> > コンテナ自身のお世話
> > >     getNamespace
> > >     setNamespace
> > >     getPath
> > >     setPath
> > >     getClassLoader
> > >     setClassLoader
> > >     init
> > >     destroy
> >
> > コンテナ階層のお世話
> > >     hasDescendant
> > >     getDescendant
> > >     registerDescendant
> > >     include
> > >     getChildSize
> > >     getChild
> > >     getParentSize
> > >     getParent
> > >     addParent
> > >     getRoot
> > >     setRoot
> > >     registerMap
> >
> > というのもありかと.
> > init / destroy はライフサイクルとして別にしてもいいかも.
> >
> > なお,setPath / getPath は名前空間とは関係なくて,dicon ファイルなど,
> > コンテナの定義を記述したリソースのパスを設定したり取得するものです.
> >
> > クラスコメントに記述する内容も,コンテナがコンポーネントを
> > 扱う話と,コンテナ階層の話を大きな柱とするのがいいかも.
> > なので,
> >
> > > 詳細は、上のものから、すこし詳細を説明
> > > ・コンポーネントの管理
> > > ・コンテナの管理
> >
> > の「コンテナの管理」で階層のことまで説明するのがよいかと.
> > それを踏まえておけば,
> >
> > > ・DI
> >
> > ここで DI 対象のコンポーネントがどのように決まるかの説明も
> > しやすくていいかも.
> >
> > > あとは、
> > > ・ライフサイクル
> > > ・インジェクションの種類
> > > ・コンテナの構造>>>階層化されていることについて
> > >
> > > こんな骨組み?
> >
> > これらは上の方に含まれちゃうような.
> >
> > > うーん、まだどうかいていいやら・・・
> > > すいません、助言のほどよろしくお願いしますm__m
> >
> > 同じくどう書いてイイやら悩んでしまいます.(^^;
> > ともあれ (JW),いきなり大きく考えずに,少しずつ書きながら
> > みんなの意見を集めるということでどうでしょう?
> > # 超他力本願寺 (^^;
> >
> > クラスコメントの構成について,あまり詳細に考え過ぎると
> > なかなか手が動かなくなりそうなので,詳細は後回しにして
> > いいんじゃないかと思います.
> >
> > そんなわけで (どんなわけで?),まずはコンテナの基本機能として,
> > コンポーネントを取り扱っているところから書き始めてみては
> > いかがでしょうか.
> >
> > 頑張れ〜.
> >
> >
> > --
> > <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 mailing list
> > seasar-javadoc @ ml.seasar.org
> > https://www.seasar.org/mailman/listinfo/seasar-javadoc
> >
>
>
> --
> -----------------------------
> http://d.hatena.ne.jp/vestige/
> http://www001.upp.so-net.ne.jp/vestige/
>


-- 
-----------------------------
http://d.hatena.ne.jp/vestige/
http://www001.upp.so-net.ne.jp/vestige/


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