Section 48.15: 확장 메소드를 사용하여 편리한 mapper 클래스 만들기
확장 (extension) 메소드를 이용하면, 보다 편리한 mapper 클래스를 만들 수 있다. 다음과 같은 DTO 클래스들이 존재하는 경우를 생각해보자.
public class UserDTO {
public AddressDTO Address {
get;
set;
}
}
public class AddressDTO {
public string Name {
get;
set;
}
}
이제 각 클래스들을 아래와 같이 대응되는 view model 클래스들로 매핑시켜야 한다.
public class UserViewModel {
public AddressViewModel Address {
get;
set;
}
}
public class AddressViewModel {
public string Name {
get;
set;
}
}
이러한 경우, 아래와 같은 mapper 클래스를 정의할 수 있다.
public static class ViewModelMapper {
public static UserViewModel ToViewModel(this UserDTO user) {
return user == null ?
null :
new UserViewModel() {
Address = user.Address.ToViewModel()
// Job = user.Job.ToViewModel(),
// Contact = user.Contact.ToViewModel() .. 기타 등등
};
}
public static AddressViewModel ToViewModel(this AddressDTO userAddr) {
return userAddr == null ?
null :
new AddressViewModel() {
Name = userAddr.Name
};
}
}
이제, 위에서 정의한 mapper 를 다음과 같이 호출할 수 있다.
UserDTO userDTOObj = new UserDTO() {
Address = new AddressDTO() {
Name = "Address of the user"
}
};
UserViewModel user = userDTOObj.ToViewModel(); // DTO 클래스를 Viewmodel 에 매핑시킨다
이 방식의 장점은, 모든 매핑 메소드들은 공통된 이름 (ToViewModel
) 을 갖게 될 것이며 이는 다양한 방법으로 재사용될 수 있을 것이다.
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
48.17: 예외적인 특수한 처리를 위해 확장 메소드 이용하기 (0) | 2022.12.01 |
---|---|
48.16: 확장 메소드를 사용하여 새로운 collection 타입 (예:DictList) 생성하기 (0) | 2022.12.01 |
48.14: 확장 메소드를 통한 강력한 형식 (strongly typed) 의 래퍼 (wrapper) 작성하기 (0) | 2022.12.01 |
48.13: IList<T> 에 대한 확장 메소드 예제 - 2 개의 List 비교하기 (0) | 2022.12.01 |
48.12: 인터페이스와 확장 메소드를 활용한 DRY 원칙 기반의 코드 및 mix-in 과 유사한 기능 제공하기 (0) | 2022.10.21 |