解説その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

対応してる型、って言うのかな?

  1. プリミティブ型
  2. そのラッパ
  3. 文字列
  4. 配列
  5. Collection
  6. Date、Calendar
  7. BigInteger、BigDecimal
  8. Employeeとか自作の型?


で、変換前後のプロパティーの型を見て自動変換。
Employee->文字列とかは、toStringする。そういう変換されたくなかったら、同じプロパティー名付けないようにする。(w
プリミティブ->Employeeとかワケ分かんないは、無視する。