DDD 원칙에 따르면 값 개체는 자체 수명주기가없는 값을 인코딩하는 데 사용되지만 값은 그대로 사용하는 것이 좋습니다. 설계 상 이러한 객체는 불변으로 만들어집니다. 이들은 종종 프리미티브를 대체하기 때문에 코드가 의미 론적이며 오류에 안전합니다.변경 불가능한 값 개체의 변형 작업을위한 전략
이론적 근거는 매우 합리적이지만 때로는 일부 성가신 작업으로 이어집니다. 예를 들어, 어드레스가 라인을 따라 값 객체로 부호화하는 경우 고려해야 사용자가 주소의 한 필드를 변경하기위한 애플리케이션에서
class Address extends ValueObject {
public Address(String line1, String line2, String postalCode, String String country) {
...
}
...
}
를, 그 특이한 없을 것이다. 코드에서이를 달성하려면 다음과 같이해야합니다.
String newCity = ...;
Address newAddress = new Address(
oldAddress.getLine1(),
oldAddress.getLine2(),
oldAddress.getPostalCode(),
newCity,
oldAddress.getCountry());
이것은 매우 반복적이며 지나치게 자세한 코드로 이어질 수 있습니다. 불변의 가치 객체를 유지하면서 이것을 피하기위한 좋은 전략은 무엇입니까?
내 자신의 아이디어 :
개인 세터,이 같은 헬퍼 메소드를 사용 수 :
public Address byChangingPostalCode(String newPostalCode) { Address newAddress = this.copy(); newAddress.setPostalCode(newPostalCode); return newAdress; }
단점은 객체가 이제 더 이상 불변이 아니라만큼이다 그건 사적인 것으로서, 문제가되어서는 안된다, 그렇지?
가치 개체를 대신 본격적인 개체로 만듭니다. 결국 장시간 수정해야 할 필드의 필요성은 수명주기가 있음을 나타냅니다. 나는 이것이 도메인 디자인보다는 개발자 편의성에 관한 것이기 때문에 이것으로 확신하지는 못한다.
나는 당신의 제안을 기쁘게받을 것입니다! 귀하의 제안에 대한
UPDATE
감사합니다! 나는 개인적인 세터와 교정 방법을 가지고 갈 것이다.
사용 언어를. 예 : F # :'let newAddress = {oldAddress with PostalCode = 10005}' – guillaume31