S2Dxoを今更ながらのぞいてみた

ML(seasar-dotnet:1013)で質問があったSeasar.NET版S2Dxoの修正のために
Java版の方のS2Dxoを参考までにとのぞいてみました。
(バージョンは2.4.31-SNAPSHOT)


構成を図(JUDEを使用)にするとこんな感じ。

コンポーネントの役割は以下のようになっているようです。

  • 利用者側から見ると入り口はDxoInterceptor
  • 変換処理はDxoCommand#executeを呼んで行う
  • DxoMetaDataで各メソッドと対応するDxoCommandの生成、キャッシュ
  • DxoMetaDataFactoryでDxoMetaDataの生成、キャッシュ
  • 実質的な変換処理はConverterで行う
  • ConverterFactoryは用途に合ったConverterの生成、キャッシュ
  • CoversionContextは変換処理に必要な諸情報のキャッシュ

それぞれの実装クラスでは様々な用途を想定して

色々なことをしてその違いを吸収しているみたいです。



各変換情報がキャッシュされている点、

一連の変換処理がきちんと分業されている点など

全体的には(少なくとも自分にとっては)「成る程〜」、

と唸らされてしまう作りになっていました。

基本的にはこれをそのまま移植した方が良さそうです。



あえてケチをつけるとすればDxoMetaDataImplの初期化処理になるでしょうか。

このクラスでは初期化時にDxoInerceptorがかけられたクラスのメソッド全てに

ついてメタデータの初期化が行っているように見えます。

パフォーマンスのことを考えると、これはクラス単位ではなく

メソッド単位でやるようにして初期化処理を分散させた方が

いい気がします。



これらを踏まえて次は.NET版の今の実装を読み、
どうするか考えてみようと思います。

そのままの移植は少なくとも今は見送ろうという考えに

変わりつつあります。詳しくは10/26の日記で。

(2008/10/26追記)