2011-08-13 4 views
0

도메인 모델을 프레젠테이션 모델에 일반적으로 매핑하는 방법을 알아 내려고합니다. 예를 들어, 다음과 같은 간단한 객체와 인터페이스 ...도메인 모델을 프레젠테이션 모델에 일반적으로 매핑하는 방법은 무엇입니까?

// Product 
public class Product : IProduct 
{ 
    public int ProductID { get; set; } 
    public string ProductName { get; set; } 
} 

public interface IProduct 
{ 
    int ProductID { get; set; } 
    string ProductName { get; set; } 
} 

// ProductPresentationModel 
public class ProductPresentationModel : IProductPresentationModel 
{ 
    public int ProductID { get; set; } 
    public string ProductName { get; set; } 
    public bool DisplayOrHide { get; set; } 
} 

public interface IProductPresentationModel 
{ 
    int ProductID { get; set; } 
    string ProductName { get; set; } 
    bool DisplayOrHide { get; set; } 
} 
이 같은 코드를 작성할 수 있도록하고 싶습니다

...

MapperObject mapper = new MapperObject(); 
ProductService service = new ProductService(); 
ProductPresentationModel model = mapper.Map(service.GetProductByID(productID)); 

...에서 "MapperObject"를 제공 두 속성에 매핑되는 속성과 반사, 규칙 기반 매핑 등을 사용하여 매핑되는 개체의 종류를 자동으로 파악할 수 있습니다. 그러면 UserPresentationModel 및 User와 같은 개체를 동일한 방식으로 쉽게 매핑 할 수 있습니다 MapperObject.

이것이 가능합니까? 그렇다면 어떻게?

편집 : 대신,

public class ProductMapper 
{ 
    public ProductPresentationModel Map(Product product) 
    { 
     var presentationModel = new ProductPresentationModel(new ProductModel()) 
           { 
            ProductID = product.ProductID, 
            ProductName = product.ProductName, 
            ProductDescription = product.ProductDescription, 
            PricePerMonth = product.PricePerMonth, 
            ProductCategory = product.ProductCategory, 
            ProductImagePath = product.ProductImagePath, 
            ProductActive = product.ProductActive 
           }; 

     return presentationModel; 
    } 
} 

난 여전히 목록 작업이 활용하는 방법을 해결하려고 노력하고 있어요 : 그냥 명확성을 위해, 여기에 내가 현재 사용하고 비 일반적인 MapperObject의 예입니다 하나의 제품에 불과하지만 다른 주제입니다. :)

답변

1

나는 원하는 것을 원합니다. 클라이언트 (GUI, 외부 서비스 등)와 통신하기 위해 도메인 엔터티 (Product)를 어떤 종류의 DTO 개체 (ProductPresentationModel)에 매핑하려고합니다.

나는 당신이 찾고있는 모든 기능을 AutoMapper 프레임 워크에 담았습니다.

다음과 같이 AutoMapper로 쓸 수 있습니다. Mapper.CreateMap(); 이 위키 https://github.com/AutoMapper/AutoMapper/wiki/Flattening

행운의

보세요. /최고의 감사 Magnus