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追記)