-名前空間の方向性(2)

すいません、言葉足らずでしたね。DbUtilsのハマリバグが取れたので、おちついて説明します。

  • S2Container parent
    • .include(child);
    • .regist(Client.class, "client");
    • S2Container child
      • .setNamespace("child");
      • .regist(Server.class, "server");

こういう風にあったとき、Serverはchildのincludeでparentにもregistされるかと思います。つまり、parent.getComponent("client");としたときに、clientがserverに依存していたら、内部でserverを取りに行くのですが、そのとき、parent上にある"child:client"を取ることになります(ですよね?)。こうだと、childをダイナミックに切り離せないのです。include時にserverコンポーネントが上っていってます。これを上げてregistせずに、parent.getComponenent()ではじめてchildを探し下って行くようにしてもらえるとプラグインのモデル部分が作りやすいなと思いました。
あと、ちょっと別の話題として名前空間が定義者命名だとかぶる可能性があります(実際、私、凡ミスでかぶりました)。それなので、たとえば#include(S2Container, namespace)という風にして、S2Container#getNamespace()はなしにするという手もあるか?include側で名前空間を命名する方法です。
で、さらには#declude(S2Container)があるとうれしい、という感じです。普段はつかわない機能だと思いますので、やるとしたら、プラグイン用のスーパーインターフェイスで定義で十分です。
しかーし、案件開発でハイになってるので有用な考えなのかよくわかってません。すいません。いよいよ週明けにはTapestry+Seasar2の事例。ごく小さなサービスですが、一部上場企業の自社求人サイトです。