> 백엔드 개발 > C#.Net 튜토리얼 > AutoMapper를 사용하여 Dto와 Model 간의 무료 변환 달성(1부)

AutoMapper를 사용하여 Dto와 Model 간의 무료 변환 달성(1부)

巴扎黑
풀어 주다: 2016-12-20 11:28:46
원래의
1621명이 탐색했습니다.

실제 소프트웨어 개발 프로젝트에서는 "비즈니스 로직"으로 인해 동일한 데이터에 대해 다양한 변환을 수행해야 하는 경우가 많습니다. 예를 들어 웹 애플리케이션은 프런트 엔드를 통해 사용자 입력을 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;

공개 저자 목록 { get; }

public 출판사 출판사 { get; set }

public int? set }

} 각 책; 게시됨 비즈니스 정보(게시자):

C# 코드

공개 클래스 게시자

{

공개 문자열 이름 { get;

}

각 책은 최대 2명의 저자 정보(저자)를 가질 수 있습니다:

C# 코드


공개 클래스 저자

{

공개 문자열 이름 { get;

공개 문자열 설명 { get; set; }

public ContactInfo ContactInfo { get; set; 연락처 정보(ContactInfo):

C# 코드


public class ContactInfo

{

public string Email { get; >

공개 문자열 블로그 { get; set; 계층적 구조를 가지고 있습니다.

Dto 구조를 다시 살펴보겠습니다.

Dto에는 BookStore에 해당하는 BookStoreDto가 있습니다.

C# 코드

public class BookStoreDto

{

public string Name { get ; set; }


public List set }

public AddressDto }

주소에 해당하는 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

BookStore의 필드Dto 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 변환을 실현하는 것이 필요합니다.


관련 라벨:
c#
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿