Axs Document
  • AXS Framework
  • 1. Common structures
    • 의존성 관계 설정 - Dependency Injection
    • 캐싱 - Caching
    • 로깅 - Logging
    • 세션 - Session
    • 다중 테넌트 - Multi Tenancy
    • 모듈 시스템 - Module System
    • 객체 매핑 - Object To Object Mapping
    • 메일 연동 - Mail System
  • 2. Domain Layer
    • 엔티티 - Entities
    • 저장소 - Repositories
    • 도메인 서비스 - Domain Services
    • 작업 단위 - Unit Of Work
  • 3. Application Layer
    • 애플리케이션 컨트롤러 - Application Controller
    • DTO - Data Transfer Objects
    • DTO 객체의 유효성 체크 - Validating Data Transfer Objects
    • 인증 - Authorization
    • 감사 로그 - Audit Logging
    • 엔티티 기록 - Entity History
  • 4. Object Relational Mapping
    • EntityFramework 통합
    • Dapper 통합
  • 5. Background Services
    • 백그라운드 작업과 워커
  • 6. Presentation Layer
    • 에러 핸들링
Powered by GitBook
On this page
  1. 1. Common structures

객체 매핑 - Object To Object Mapping

Previous모듈 시스템 - Module SystemNext메일 연동 - Mail System

Last updated 1 year ago

Object To Object Mapping

설명

지루하고 반복적인 매핑 작업을 자동으로 매핑해서 객체 변환 하는 기능을 AutoMapper과 통합하여 기본 제공한다.

"AutoMapper"은 .NET 개발 환경에서 객체 간 데이터 매핑을 자동화하기 위한 도구입니다. 이 라이브러리는 C# 및 .NET 언어로 개발된 애플리케이션에서 데이터 전송 객체(DTO)와 엔티티 객체(Entity) 간의 속성 매핑을 단순화하는 데 도움을 줍니다. AutoMapper를 사용하면 반복적이고 번거로운 코드 작성을 줄일 수 있으며, 코드 유지보수를 개선할 수 있습니다.

예제

public class SampleAppController : AppController
{
    private readonly IRepository<Sample> _sampleRepository;
    private readonly IObjectMapper _objectMapper;

    public UserAppController(IRepository<Sample> sampleRepository, IObjectMapper objectMapper)
    {
        _sampleRepository = sampleRepository;
        _objectMapper = objectMapper;
    }

    // 사용자에게 올라온 파라메터를 CreateSampleDto의 Dto로 바인딩한다.
    public void CreateSample(CreateSampleDto input)
    {
        // 사용자단에서 올라온 Dto 객체를 엔티티 객체로 변환한다.
        var sample = _objectMapper.Map<Sample>(input);
        // 변환된 엔티티 객체의 값을 DB에 저장한다.
        _userRepository.Insert(sample);
    }
}

AutoMapper와 통합

IObjectMapper를 통해서 AutoMapper과 통합하였고, 추가 기능을 제공하고 있습니다.

매핑 만들기

자동 매핑

대부분의 경우 클래스를 직접 매핑 할 수 있습니다. 이 경우 AutoMap, AutoMapFrom 및 AutoMapTo 속성을 사용할 수 있습니다. 예를 들어 위 샘플에서 CreateSampleDto 클래스를 Sample 클래스에 매핑하려면 아래와 같이 AutoMapTo 특성을 사용할 수 있습니다 :

  • 중요: AutoMapper.AutoMap 아님 using문 확인 해야함

using Axs.AutoMapper;

[AutoMap(typeof(Sample))]
public class CreateSampleDto
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public string EmailAddress { get; set; }
    public string Password { get; set; }
}

AutoMap 속성은 두 클래스를 양방향으로 매핑합니다.

매핑 커스터마이징

경우에 따라 단순 매핑이 적합하지 않을 수 있습니다. 예를 들어 두 클래스의 속성 이름이 약간 다르거나 매핑하는 동안 일부 속성을 무시할 수 있습니다. 이러한 경우 AutoMapper의 API를 직접 사용하여 매핑을 정의해야합니다.

매핑 시 Security 프로퍼티를 무시하고 사용자에게 이름이 약간 다른 Email 프로퍼티가 있다고 가정 할때 아래와 같이 매핑을 정의 할 수 있습니다.

[DependsOn(typeof(AxsMapperModule))]
public class MySampleModule : AxsModule
{
    public override void PreInitialize()
    {
        Configuration.Modules.AxsAutoMapper().Configurators.Add(config =>
        {
            config.CreateMap<CreateSampleDto, Sample>()
                    // 매핑이 무시되도록 하여 값이 복사가 안되게 한다.
                    .ForMember(u => u.Security, options => options.Ignore())
                    // 속성값이 다를때 매핑시켜 준다.
                    .ForMember(u => u.Email, options => options.MapFrom(input => input.EmailAddress));
        });
    }
}

확인

SampleAppController 서비스에서 CreateSample 메소를 호출하여 아래와 같이 객체를 매핑하여 사용할 수 있습니다.

매핑을 사용하기 전에 AutoMapper에서는 클래스 간의 매핑을 정의해야합니다. 매핑에 대한 자세한 내용은 AutoMapper의 자체 설명서()를 참조하십시오. Axs를 사용하면 좀 더 쉽게 모듈화 할 수 있습니다.

documentation
Alt text
picture 1