[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 メーリングリストの案内