[Seasar-user:515] Re: S2ContainerImpl#getComponentDefSize()
B isid.co.jp Yasuo Higa
higa
2004年 3月 27日 (土) 10:52:13 JST
<[E-MAIL ADDRESS DELETED]> の、
"[Seasar-user:513] Re: S2ContainerImpl#getComponentDefSize()" において、
"TAKAI Naoto <[E-MAIL ADDRESS DELETED]>"さんは書きました:
ひがです。
>
> eclipseでCall Hierachyをのぞいてみたところ、
> S2ContainerImpl#destroy()
> S2ContainerImpl#include(S2Container)
> S2ContainerImpl#init()
> あたりに影響がでてきそうです。いずれも利用方法は getComponentDefSize()
> でコンポーネント数を取得して、getComponentDef(int) をぐるぐるまわすっ
> て利用方法です。
>
> このうち、getComponentDefSize() に対してpublicなアクセスをしているのが
> includeメソッドだけです。includeのときにincludeされる子コンテナー自身を
> 親コンテナーに追加するメリットはあまり感じません。
includeされたときに、今だと、ごみのようなS2Containerが
残っちゃうんですよね。
#悪さはしてないみたいだけど。
という理由もあるので、getComponentDefSize()は、
ユーザが登録したコンポーネントの数を返すってことにしたいと思います。
> # そういえば、コンポーネントの名前空間ってフラットなのですね。
>
これは、悩みました。コンテナの定義は、親子で定義されるよりも、
兄弟として定義されるほうが多いだろうということで、
フラットにしてます。
兄弟というのは、
<include path="兄.xml"/>
<include path="弟.xml"/>
という意味です。SpringやPicoのように親子で定義すると、
弟が兄のコンポーネントを参照できなくなるなぁと。
#もしかしたらできるのかも。試してません
componentsタグにnamespace属性をつけて、同一コンポーネント定義の
中ならnamespaceなしでアクセスできて、
他のコンポーネント定義(親と兄弟)に
アクセスするときは、namespaceをつけてアクセスするってのも手ですね。
foo-config.xml
<components namespace="foo">
<component name="aaa" .../>
<component name="bbb" ...>
<arg>aaa</arg>
</component>
<component name="ccc" ...>
<!-- 一応可能 -->
<arg>foo/aaa</arg>
</component>
</components>
bar-config.xml
<components namespace="bar">
<component name="ddd" ...>
<arg>foo/aaa</arg>
</component>
</components>
app-config.xml
<components>
<include path="foo-config.xml">
<include path="bar-config.xml">
</components>
結構仕組み変わってきますけど(笑)
コンポーネントの定義の分割と名前空間は、IoCコンテナの
キーポイントだと思ってます。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.
Seasar-user メーリングリストの案内