usotech

erratic magical world

JAX-RS のモデル

JAXB と JPA をひとつのモデルに混ぜるのってアリ?

  • JPA と JAXB でモデル分けると変換用のボイルプレートコードが大量発生する。
    • どうすべき?
  • エンティティに循環参照があったりするとキツい。
    • 複雑な関連を持ったエンティティを全てシリアライズするのは非現実的。
    • すべてのリクエストに対してエンティティのオブジェクトグラフを深くまで辿っていらない情報まで返す必要ある?
    • JAXB オブジェクトが複数のシリアライゼーション形式をサポートしていれば良いけど JAXB も Jackson もそんな機能はサポートしてない。
  • 複数のシリアライゼーション形式をサポートしようとするとアノテーションヘルになりそう。
    • 複数の DTO 使うとより冗長になるけど少なくとも上手くいく。

JAX-RS:モデルとベストプラクティス

  • ちょっと教えて。
    • モデルを異なる jar にして共有してる?
    • いつも DTO 使ってる?
  • プロジェクトの複雑さによる。
    • シンプルなプロジェクトなら DTO レイヤーは作らない。
    • クライアントとサーバ両方を自分でコントロール出来るなら新しいレイヤは作らずモデルを共有する(jar を分ける)。
    • API を外部に公開するなら DTO 使ってモデルを分離するのは良いアイディア。モデルの変更によって API が壊れない。
  • 私見では DTO レイヤは次の理由で必要になる。
    • 関心の分離。
    • 出力サイズの最適化。
    • やっぱり DTO 使う方が良さそうに思う。