[Seasar-user:8091] Re: Seasar プロジェクトで学ぶ、ソースコードリーディング!

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 6月 6日 (水) 02:00:13 JST


小林 (koichik) です.

Date:    Wed, 6 Jun 2007 01:21:38 +0900
From:    "宮本大輔" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:8090] Re: Seasar プロジェクトで学ぶ、ソースコードリーディング!

> S2ContainerSelImpl, selパッケージ, SelContextImpl 等、「sel」という単語片がありますが、
> この「sel」は何を略したもので、どういった意図のものでしょうか?

Seasar Expression Language ですかねぇ.
JSP などの EL (Expression Language) と同類で,
式言語と呼ばれるものです.

今は OGNL という別の式言語が使われていて SEL は
使われていませんが,勉強目的ならシンプルな言語
処理系として見て損はないのではないかと.
# といいつつ,自分が Seasar に関わるようになった時は
# もう OGNL だったので SEL のソースは見たことありませんが.


> その後、ComponentDefImpl#assemble() 辺りに到達して、ちょっと雲行きが怪しくなって来て
> いるところですが、思いの外コードが読めるので、ちょっと嬉しくなっているところです。

assembler と deployer が DI コンテナとしての Seasar2 の
キモみたいなところなので頑張ってください!!

以下,多少 (?) ネタバレ気味なので最初は
見ない方がいいかも.(^^;
どうにも困ったら,あるいは assembler/deployer の
コードが理解できてからでも参考にどうぞ.













DI ではコンポーネントのプロパティに別のコンポーネントが
設定されたりするわけですが,その様子を次のように
表したとします.

+-----------+-------+
|           |       |  DI  +-----------+
|           | prop1 |<-----| component |
|           |       |      +-----------+
|           +-------+
|           |       |  DI  +-----------+
| component | prop2 |<-----| component |
|           |       |      +-----------+
|           +-------+
|           |       |  DI  +-----------+
|           | prop3 |<-----| component |
|           |       |      +-----------+
+-----------+-------+

実際は右側のコンポーネントにもプロパティがあるので,
一つのコンポーネントに着目すると,

      +-----------+-------+  DI
      |           | prop1 |<-----
  DI  |           +-------+  DI
<-----| component | prop2 |<-----
      |           +-------+  DI
      |           | prop3 |<-----
      +-----------+-------+

ということになります.
コンポーネントには他のコンポーネントが DI されるし,
他のコンポーネントに DI されもするということですね.

ここで図の右側,他のコンポーネントをプロパティ等に
DI するのが assembler パッケージ役割になります.

また,図の左側,他のコンポーネントに DI されたり,
コンテナの利用者が S2Container#getComponent() を
呼び出したりした場合のためにコンポーネントを
送り出すのが deployer パッケージの役割になります.

そんなわけで (どんなわけで?),S2Container 内部では

 deployer +-----------+------+ assembler   deployer +-----------+------+ assembler
<---------| component | prop |<---------- <---------| component | prop |<----------
          +-----------+------+                      +-----------+------+

という連鎖が起きていることになります.
実際には assembler や deployer は矢印に相当するわけでは
ないので,もしかすると誤解を招く図かもしれませんが,
このようにコンポーネントの右側 (assembler) と
左側 (deployer) で考えると役割を理解しやすいかと
思います.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>




Seasar-user メーリングリストの案内