Как в общем случае сопоставить модель предметной области с моделью представления? - PullRequest
0 голосов
/ 13 августа 2011

Я пытаюсь выяснить, как в общем случае сопоставить модель домена с моделью представления.Например, учитывая следующие простые объекты и интерфейсы ...

// 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 иПользователь с тем же MapperObject.

Возможно ли это?Если да, то как?

РЕДАКТИРОВАТЬ: Просто для ясности, вот пример не универсального 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;
    }
}

Я все еще пытаюсь понять, какчтобы это работало со списком, а не с одним продуктом, но это уже другая тема:)

1 Ответ

1 голос
/ 20 сентября 2011

Я вижу, что ты хочешь. Вы хотите сопоставить свои доменные сущности (Product) с некоторыми объектами DTO (ProductPresentationModel) для связи с вашими клиентами (GUI, внешние службы и т. Д.).

Если у вас есть все эти функции, которые вы ищете, упакованные в платформу AutoMapper.

Вы можете написать так с AutoMapper: Mapper.CreateMap ();

посмотрите на эту вики https://github.com/AutoMapper/AutoMapper/wiki/Flattening

Удачи. / С наилучшими пожеланиями Магнус

...