<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>devkuma – Dto</title>
    <link>https://www.devkuma.com/jp/tags/dto/</link>
    <image>
      <url>https://www.devkuma.com/jp/tags/dto/logo/180x180.jpg</url>
      <title>Dto</title>
      <link>https://www.devkuma.com/jp/tags/dto/</link>
    </image>
    <description>Recent content in Dto on devkuma</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>jp</language>
    <managingEditor>kc@example.com (kc kim)</managingEditor>
    <webMaster>kc@example.com (kc kim)</webMaster>
    <copyright>The devkuma</copyright>
    
	  <atom:link href="https://www.devkuma.com/jp/tags/dto/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>DTO、VO、Entity</title>
      <link>https://www.devkuma.com/jp/docs/dto-vo-entity/</link>
      <pubDate>Tue, 06 Jul 2021 11:04:23 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/dto-vo-entity/</guid>
      <description>
        
        
        &lt;h2 id=&#34;dtodata-transfer-objectとは&#34;&gt;DTO(Data Transfer Object)とは?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;データ転送(移動)オブジェクトという意味を持つ。&lt;/li&gt;
&lt;li&gt;レイヤー間でデータを交換するためのオブジェクト(Java Beans)である。
&lt;ul&gt;
&lt;li&gt;DBから取得したデータをServiceやControllerなどへ送るときに使用するオブジェクトを指す。&lt;/li&gt;
&lt;li&gt;ロジックを持たない純粋なデータオブジェクトであり、GetterとSetterメソッドだけを持つ。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;vovalue-objectとは&#34;&gt;VO(Value Object)とは?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;VO(Value Object)は文字どおり値オブジェクトという意味を持つ。&lt;/li&gt;
&lt;li&gt;オブジェクトの不変性(オブジェクトの情報が変更されないこと)を保証する。
&lt;ul&gt;
&lt;li&gt;Getterメソッドだけを持つことができる。&lt;/li&gt;
&lt;li&gt;値はコンストラクタで設定でき、このときBuilderパターンを使うと便利である。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;名前が異なるVOインスタンスであっても、すべての属性値が同じなら、2つのインスタンスは同じオブジェクトだと言える。
&lt;ul&gt;
&lt;li&gt;そのため、VOではObjectクラスの&lt;code&gt;equals()&lt;/code&gt;と&lt;code&gt;hashcode()&lt;/code&gt;をオーバーライドする必要がある。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;VO内部で宣言された属性(フィールド)のすべての値がVOオブジェクトごとに同じであって初めて、同一のオブジェクトと判定する。&lt;/li&gt;
&lt;li&gt;テーブル内の属性以外に追加の属性を持つことができる。&lt;/li&gt;
&lt;li&gt;複数のテーブル(A、B、C)に対する共通属性を集めたBaseVOクラスを継承して使うこともできる。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;entityとは&#34;&gt;Entityとは?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;実際のDBテーブルにマッピングされるオブジェクトである。&lt;/li&gt;
&lt;li&gt;データの集合を意味する。&lt;/li&gt;
&lt;li&gt;保存され、管理されるべきデータである。&lt;/li&gt;
&lt;li&gt;概念、場所、出来事などを指す。&lt;/li&gt;
&lt;li&gt;有形または無形の対象を指す。&lt;/li&gt;
&lt;li&gt;IDによって各Entityを区別し、一意な識別子を持っていなければならない。
&lt;ul&gt;
&lt;li&gt;ID、会員番号など。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;必ず1つ以上の属性が存在しなければならない。
&lt;ul&gt;
&lt;li&gt;名前、住所など。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;永続的に存在するインスタンスの集合である。&lt;/li&gt;
&lt;li&gt;必ず該当業務で必要であり、管理したい情報でなければならない。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DTOはレイヤー間のデータ移動に使用されるオブジェクト。&lt;/li&gt;
&lt;li&gt;VOは値を持つ純粋なドメイン。&lt;/li&gt;
&lt;li&gt;EntityはそれをDBテーブルにマッピングするオブジェクト。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/dto-vo-entity/layer.png&#34; alt=&#34;レイヤー間の区分&#34;&gt;&lt;/p&gt;

      </description>
      
      <category>dto</category>
      
      <category>vo</category>
      
      <category>entity</category>
      
    </item>
    
  </channel>
</rss>
