解説その1
ドキュメントの元ネタってコトで。
Dxoについては、この辺参照ってことで。
http://d.hatena.ne.jp/higayasuo/20050817#1124260949
http://d.hatena.ne.jp/higayasuo/20050818#1124351693
http://d.hatena.ne.jp/higayasuo/20050825#1124964366
http://d.hatena.ne.jp/higayasuo/20050825#1124970673
もしかしたら、古くなった情報があるかもしれないけど。
その1、終わり。
その2
使い方
Dxoインターフェースを作る。
こんな感じ。
public interface EmpDxo {
EmpDto convert(Employee employee);Employee convert(EmpDto empDto);
}
プレゼンテーション層用Dto->Entity
Entity->プレゼンテーション層用Dto
とかを書いとく。
変換後の型 convert(変換前の型 ほげ);
次はdiconファイルに登録して、用意したインターフェースにS2DxoIntereceptorを適用。
こんな感じ。
s2dxo.s2DxoIntereceptor
H★O★TでもAutoでもいけるので、適当にやってみて。(w
準備はこれだけ。(jarをクラスパスに通すとかはあるけど)
で、動かしてみると。
こうなる。
public void testInvoke() {
Employee employee = new Employee();
employee.setEname("Kimu");
employee.setHiredate(new Date(1000, 0, 1));
Department department = new Department();
department.setDname("The Seasar Foundation");
employee.setDepartment(department);EmpDto empDto = empDxo.convert(employee);
assertEquals("Kimu", empDto.getEname());
assertEquals("The Seasar Foundation", empDto.getDname());
assertEquals("2900/01/01", empDto.getHiredate());
}
やってることは、プロパティー名が同じだったら型変換。
まず、EmployeeのenameがEmpDtoのenameになってること。
次、Employee.department.dnameがEmpDto.dnameになってること。
それと、hiredateがDate型から、文字列になってること。
enameは、単純なので分かると思うし、dnameも間に一個あるくらいなので、分かるとして。(w
日付<=>文字列のyyyy(略のフォーマットは、BasicDxoImplのプロパティーにある。
プレゼンで表示するフォーマットが、アプリで統一されてるなら、s2dxo.diconのBasicDxoImplのプロパティーをセットすればOK。なんだけど、あとでs2dxo.diconじゃないとこに定義するようにしとく。
型毎に違うフォーマットを使いたければ、インターフェースにアノテーションでも書けばいいな〜と思った。
今。(w だから、まだ出来ない。
↓DTOとかのソースがそのままあるだけ。
続きを読むその3
対応してる型、って言うのかな?
- プリミティブ型
- そのラッパ
- 文字列
- 配列
- Collection
- Date、Calendar
- BigInteger、BigDecimal
- Employeeとか自作の型?
で、変換前後のプロパティーの型を見て自動変換。
Employee->文字列とかは、toStringする。そういう変換されたくなかったら、同じプロパティー名付けないようにする。(w
プリミティブ->Employeeとかワケ分かんないは、無視する。