Я пытаюсь выяснить, как в общем случае сопоставить модель домена с моделью представления.Например, учитывая следующие простые объекты и интерфейсы ...
// 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;
}
}
Я все еще пытаюсь понять, какчтобы это работало со списком, а не с одним продуктом, но это уже другая тема:)