TIL 2021.04.21[DTO/トラブルシューティング]

2492 ワード

問題の開始点
JSONデータに応答する場合、どのように並べばいいですか?
たとえば、要求が来た場合、次のJSONデータに応答します.
{
  "name": "Kyu",
  "age": 20,
  "region": "Korea",
  "favorite_food": [
    "Water",
    "Coffee"
    ]
}
最初に考えたのは、EntityオブジェクトにString[] favorite_foodフィールドを追加して返すことだけです.
これにより、Entityクラスは次のようになります.
public class User {
     private String name;
     private int age;
     private String region;
     private String[] favoriteFood; 
     
     // ...Constructor, Getter
}
問題はないように見えますが、データベースにカラムデータ型で配列を入れることができないのが問題です.
調べてみると、MySQL 5.7.8版以上からJSONデータ加入をサポートしているとのことでしたが、思ったより習得しやすいものではありません.
そこでどうすればいいか考えているうちに、Coquの同僚たちに、データをStringとして保存して返信するときに、Stringを並べ替えたStringに戻して返信する方法を提案しました.
説明の過程で、いくつかのキーワードが現れ、そのうちの1つはDTOである.
闻いているうちにDTOがどういう意味か分かりませんでしたが、后で同僚たちと话をして、検索しながら勉强しました.
私の話であなたが学んだことを説明します.
Entityクラスは、リポジトリのデバイスに接続する場合にのみ使用されます.DTOでは、サービス-コントローラ-クライアント側でEntityを使用する必要があります.
DTOを開くと、データ転送オブジェクトになります.
このロールは、データを移動するときに使用されるオブジェクトと考えられる名前から推定されます.
したがって、DTOは、データの通信に使用されるオブジェクトとして理解される.
DTOを作成する代わりにEntityクラスは使用しません.これは、ビューレイヤとデータベースレイヤが完全に別々に使用されるようにするためです.
第二に、ビューと通信するオブジェクトコードは常に変更するしかないからですか?来ました.
DTOクラスが個別に作成されず、Entityのみであると仮定し、コードが頻繁に変更されていると判断した場合、デバイスに直接関連付けられたEntityがデバイスに影響し、デバイスの構造が変更される可能性があります.
まずEntityとDTOを理解して問題を解決しました
コード:https://github.com/kyu-kim-kr/sidedish/pull/26
注意:https://velog.io/@kyukim/DTO-Data-Transfer-Object