실제 소프트웨어 개발 프로젝트에서는 "비즈니스 로직"으로 인해 동일한 데이터에 대해 다양한 변환을 수행해야 하는 경우가 많습니다. 예를 들어 웹 애플리케이션은 프런트 엔드를 통해 사용자 입력을 Dto로 수집한 다음 Dto를 도메인 모델로 변환하고 이를 데이터베이스에 유지합니다. 반면, 사용자가 데이터를 요청할 때는 반대의 작업을 수행해야 합니다. 즉, 데이터베이스에서 쿼리한 도메인 모델을 반대 방식으로 Dto로 변환한 다음 사용자에게 제시하는 것입니다. 때로는 데이터를 사용하는 여러 클라이언트와 같이 더 많은 데이터 사용 요구 사항에 직면할 수도 있습니다. 각 클라이언트에는 데이터 구조에 대한 서로 다른 요구 사항이 있으므로 더 많은 데이터 변환을 수행해야 합니다.
잦은 데이터 변환은 사소하고 지저분할 때가 많습니다.
(1) 두 유형은 이름만 다를 뿐 구조는 비슷하지만 수동으로만 구현할 수 있고 속성별로만 구현할 수 있습니다. 유형 간 데이터 "전달".
(2) 새로운 데이터 변환 시나리오가 발생할 때마다 일련의 변환 로직이 수동으로 구현되어 애플리케이션 구석구석에 분산되는 반복적인 데이터 변환 작업이 발생합니다.
"오렌지"를 우리가 원하는 "사과"로 바꿀 수 있는 "Transformers" 도구가 있다면 변환 규칙을 정의하기만 하면 됩니다. 즉, 실제 비즈니스 로직을 수행하거나 간단한 시나리오에서도 규칙을 정의할 필요가 없습니다(Convention Over Configuration). 이는 매우 아름다운 일입니다. 실제로 강력한 개체-개체 매핑 도구인 AutoMapper가 있기 때문에 .NET에서 바퀴를 다시 만들 필요가 없습니다.
그렇습니다. 사실 제가 진행하고 있는 프로젝트는 위의 "혼란"을 경험하고 있으며 AutoMapper는 정말 밝은 느낌을 줍니다. 그래서 저는 AutoMapper를 시험해 보기 위해 잠시 주말을 보냈습니다. 소규모 애플리케이션 시나리오를 통해 Dto와 도메인 모델의 매핑을 깨달았고, 그 "강력한 아우라"를 정말 느꼈습니다. 혼란스러워하는 여러분에게 도움이 되길 바라면서 제 경험을 기사에서 공유하겠습니다. 나중에 전체 프로젝트 코드를 내 git 저장소에 공개할 예정입니다. 누구나 자유롭게 참조할 수 있습니다.
【1】응용 시나리오 설명
먼저 "가상" 도메인 모델을 살펴보겠습니다. 이번에는 서점(BookStore)을 정의했습니다.
C# 코드
public class BookStore
{
public string Name { get; ; }
공개 목록
도서 { get; >서점에는 자체 주소(주소)가 있습니다.C# 코드
public class Address
{
public string Country { get; set; }
공개 문자열 도시 { get; set; >
}동시에 서점에는 n권의 책(책)이 있습니다.
C# 코드 공개 수업 도서 { 공개 문자열 제목 { get; set }
공개 문자열 설명 { get; set; ; }
공개 저자 목록 { get; }
public 출판사 출판사 { get; set }
public int? set }
} 각 책; 게시됨 비즈니스 정보(게시자):
C# 코드 공개 클래스 게시자 { 공개 문자열 이름 { get; }각 책은 최대 2명의 저자 정보(저자)를 가질 수 있습니다:
C# 코드
공개 클래스 저자
공개 문자열 설명 { get; set; }
public ContactInfo ContactInfo { get; set; 연락처 정보(ContactInfo):
C# 코드
public class ContactInfo
공개 문자열 블로그 { get; set; 계층적 구조를 가지고 있습니다.
Dto 구조를 다시 살펴보겠습니다.Dto에는 BookStore에 해당하는 BookStoreDto가 있습니다.
C# 코드 public class BookStoreDto { public string Name { get ; set; }
public List
public AddressDto }
:
C# 코드 public class AddressDto { public string Country { get; set; } 공개 문자열 도시 { get; set; >}
및 Book에 해당하는 BookDto:
C# 코드
public class BookDto
{
공개 문자열 제목 { get; set; 가격 { get; 세트; }
공개 날짜 시간 { get; ; 세트; }
공개 문자열 FirstAuthorName { get; set; 🎜>
공개 문자열 FirstAuthorBlog { get; set; 공개 문자열 SecondAuthorDescription { get; set; ; set; } }BookDto는 전체 Book 계층 구조를 "평평화"합니다. BookDto는 Book과 모든 저자, 출판사 및 기타 데이터 모드를 전달합니다.
Dto에서 Model까지의 매핑 규칙을 살펴보는 시간입니다.
(1)BookStoreDto -> BookStore
(2) AddressDto -> 주소
AddressDto의 필드 국가 국가 도시 도시 거리 거리우편번호
(3) BookDto ->
BookDto의 일부 기본 필드는 Book의 필드에 직접 대응할 수 있습니다.
Book의 필드Dto Book의 필드
제목 제목
설명 설명
언어 언어
가격 쌀 가격
PublishDate PublishDate
Paperback Paperback
각 책에는 최대 2명의 저자가 있습니다. BookDto에서는 "First"와 "Second"라는 접두사가 붙은 필드가 각각 사용됩니다. 따라서 모든 FirstXXX 필드는 Book Authors의 첫 번째 Author 개체에 매핑되고 모든 SecondXXX 필드는 Authors의 두 번째 Author 개체에 매핑됩니다.
BookDto의 필드 Authors in Book
FirstAuthorName 이름
FirstAuthorDescription 설명
FirstAuthorEmail ContactInfo.Email
FirstAuthorBlog ContactInfo.Blog
FirstAuthorTwitter ContactInfo.Twitter
위 표의 ContactInfo.Email은 Author 개체 Field의 ContactInfo에 해당하는 Email을 나타내고, 곧. 마찬가지로 다음과 같습니다.
BookDto의 필드 Authors in Book
SecondAuthorName Name
SecondAuthorDescription Description
SecondAuthorEmail ContactInfo에 있는 두 번째 Author 개체의 필드 .Email
SecondAuthorBlog ContactInfo.Blog
SecondAuthorTwitter ContactInfo.Twitter
마지막으로 독립 게시자 개체에 해당하는 Pub lisher 필드가 있습니다.
BookDto 필드 출판사
출판사 이름
즉, 다른 대규모 모델 간의 대규모 Dto Data 변환을 실현하는 것이 필요합니다.