DTOの可用性
5655 ワード
#DTOとは?
まず、DTOがMVCストリームでデータを交換する責任を負わないと仮定し、以下の例を示す.
ビューに複数のCarオブジェクト名と位置情報を出力するには、どのような方法がありますか?🤔🤔
リストからnameとposition情報をそれぞれ取得する.
Mapでkey、value値でnameとpositionを取得します.
Carオブジェクトを取得します.
上記の方法があります.しかし、以上の3つの方法には問題があります.(特に3番)
まず、最初の方法は悪くないように見えますが、Carオブジェクトが30個のグローバル変数を持っている場合、すぐに答えが得られます.
第1の方法を使用するには、30個のグローバル変数をビューに渡すCarオブジェクトにgetterを作成する必要があります.この場合、30個のgetterは、Car内部のビジネスロジックの読み取り可能性を大幅に低下させる.
第2の方法も同様の理由で問題がある.
では、3番の方法は何ですか.第3の方法も可読性の問題を生じ、これよりも大きな問題がある.
CarオブジェクトをViewに直接渡すと、次の問題が発生します.
モデルのビジネスロジックをI/Oのみを担当するViewに暴露します.
Viewでは、予期せぬエラーが発生し、モデルの状態が変化する可能性があります. ビューでは、モデルのメソッドにアクセスできるため、モデルのステータスに影響を与える可能性があります. CarオブジェクトをそのままViewに渡すと、このような深刻な問題が発生します.
DTOを使用すると、上記の問題を解決できます.次のサンプルコードを見てみましょう.
デフォルトでは、DTOはgetter/setterのみをメソッドとして使用するため、ビジネスロジックの読み取り可能性の欠如を防止するために、Carオブジェクトでgetter/setterを直接実装できます.
また、DTOはモデルの状態のみを取得し、ビューはモデルの内部論理を露出させず、アクセスもできない.
エレガントなテクノロジーコース第1週のレーシングカーミッションを行い、初めてDTOに触れる.
DTOを用いてタスクを実現するとともに,DTOがモデルの可読性を向上させ,モデルとビューを結合する問題を解決できることも感じた.🙂🙂.
次のミッションからはDTOを積極的に使います!
DTO(Data Transfer Object)は、MVCストリームでのデータの交換を可能にする階層間データ交換のオブジェクトです。 論理を持たない純粋なオブジェクトはgetter/setterメソッドのみです。
DTOを使用する理由
まず、DTOがMVCストリームでデータを交換する責任を負わないと仮定し、以下の例を示す.
package racingcargame.car;
public class Car {
private String name;
private int position;
public Car(final String name, final int position) {
this.name = name;
this.position = position;
}
...
}
上記の例はレーシングカーゲームのCar Modelオブジェクトです.ビューに複数のCarオブジェクト名と位置情報を出力するには、どのような方法がありますか?🤔🤔
リストからnameとposition情報をそれぞれ取得する.
Mapでkey、value値でnameとpositionを取得します.
Carオブジェクトを取得します.
まず、最初の方法は悪くないように見えますが、Carオブジェクトが30個のグローバル変数を持っている場合、すぐに答えが得られます.
第1の方法を使用するには、30個のグローバル変数をビューに渡すCarオブジェクトにgetterを作成する必要があります.この場合、30個のgetterは、Car内部のビジネスロジックの読み取り可能性を大幅に低下させる.
第2の方法も同様の理由で問題がある.
では、3番の方法は何ですか.第3の方法も可読性の問題を生じ、これよりも大きな問題がある.
モデルをViewに渡すと?
CarオブジェクトをViewに直接渡すと、次の問題が発生します.
モデルのビジネスロジックをI/Oのみを担当するViewに暴露します.
Viewでは、予期せぬエラーが発生し、モデルの状態が変化する可能性があります.
答えはDTO?
DTOを使用すると、上記の問題を解決できます.次のサンプルコードを見てみましょう.
package racingcargame.car;
public class CarDto {
private String name;
private int position;
public CarDto(final String name, final int position) {
this.name = name;
this.position = position;
}
public String getName() {
return name;
}
public int getPosition() {
return position;
}
...
}
上図は、Carオブジェクトの状態情報を取得するCardtoオブジェクトです.デフォルトでは、DTOはgetter/setterのみをメソッドとして使用するため、ビジネスロジックの読み取り可能性の欠如を防止するために、Carオブジェクトでgetter/setterを直接実装できます.
また、DTOはモデルの状態のみを取得し、ビューはモデルの内部論理を露出させず、アクセスもできない.
に感銘を与える
エレガントなテクノロジーコース第1週のレーシングカーミッションを行い、初めてDTOに触れる.
DTOを用いてタスクを実現するとともに,DTOがモデルの可読性を向上させ,モデルとビューを結合する問題を解決できることも感じた.🙂🙂.
次のミッションからはDTOを積極的に使います!
Reference
この問題について(DTOの可用性), 我々は、より多くの情報をここで見つけました https://velog.io/@gudonghee2000/DTOテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol