VO, DTO, POSO, DAO, Entity の違い


はじめに

try! Swift ではじめてDTO、POSOという言葉を聞いて、Entityとの違いとかよくわからなかったので調べてみた。

すると、類似の用語が5つでてきた。

  • VO (Value Object)
  • DTO (Data Transfer Object)
  • POSO (Plain Old Swift Object)
    • JavaだとPOJO (Plain Old Java Object)
  • DAO (Data Access Object)
  • Entity

いずれもシンプルに関連するデータをまとめたobjectだが、微妙に性質が異なる。

VO (Value Object)

  • getterのみ
  • 不変

DTO (Data Transfer Object)

  • VO + setter
  • 可変。外から変更可能
  • 異なるレイヤー間(モデル層、ビュー層など)でデータを受け渡すのに使う

POSO (Plain Old Swift Object)

  • おそらくDTOと同じ。たぶん

DAO (Data Access Object)

  • DAO自体はデータを保持せず、DBにアクセスし、DTO/VOを返す

Entity

  • 1つのオブジェクトでDTOとDAO両方の性質をかねる

おわりに

ざっと調べた感じ、上記のように理解しました。
言語とか設計思想によっては、意味が異なってくるかもしれません。
間違ってたら教えてください。

参考