https://www.inflearn.com/questions/16046
https://youngjinmo.github.io/2021/04/dto-vo-entity/
: data transfer object로서 계층(layer)간 데이터 교환을 위해 사용하는 객체
데이터 교환만을 위해 사용하므로, 로직을 갖지 않고 getter,setter 메소드만 갖는다.
로직은 없고, 데이터를 담고 꺼내는 getter,setter메소드만 담는다.
class RGBColorDto {
private int red;
private int green;
private int blue;
public RGBColor(int red, int green, int blue) {
this.red = red;
this.green = green;
this.blue = blue;
}
public int getRed() {
return red;
}
public int setRed(int red) {
this.red = red;
}
...
}
: value object는 값 그 자체를 표현하는 객체
로직을 포함할 수 있으며, 객체의 불변성(객체의 정보가 변경하지 않음)을 보장한다.
서로 다른 이름을 갖는 vo인스턴스더라도 모든 속성 값이 같다면 두 인스턴스는 같은 객체라고 할수 있다. 이를위해 vo에는 object 클래스의 equals(), hashcode()를 오버라이딩해야한다.
단순히 데이터 값을 전달하기 위한 용도로 사용되는 객체(DTO와 같은 뜻으로 혼용, 데이터를 전송하는 목적으로 사용하는 객체)
도메인 주도 설계에서 이야기하는값 객체(value object)의 의미가 있다.
class RGBColor {
private final int red;
private final int green;
private final int blue;
public RGBColor(int red, int green, int blue) {
this.red = red;
this.green = green;
this.blue = blue;
}
public static RGBColor of(int red, int green, int blue){
return new RGBColor(red, green, blue);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RGBColor rgbColor = (RGBColor) o;
return red == rgbColor.red && green == rgbColor.green && blue == rgbColor.blue;
}
}
오버라이드 코드는 자동완성해줌
JPA로 domain을 사용하기 이전에, 비즈니스를 처리하는 곳은 service계층이었다.
이러한 방식을 트랜잭션 스크립트라고 한다.
핵심 비즈니스 로직은 도메인이 담당한다.
서비스 메소드는 트랜잭션과 도메인 간의 순서만 보장해준다.