Что означает Automapper для? Как это поможет мне с моим доменом и уровнем контроллера (asp.net mvc)
Для чего нужен Automapper?
Ответ 1
Может быть, пример поможет здесь...
Скажем, у вас хорошо подобранная схема базы данных:
Orders (OrderID, CustomerID, OrderDate) Customers (CustomerID, Name) OrderDetails (OrderDetID, OrderID, ProductID, Qty) Products (ProductID, ProductName, UnitPrice)
И позвольте сказать, что вы используете хороший модуль O/R, который возвращает вам хорошо организованную модель домена:
OrderDetail +--ID +--Order |--+--Date |--+--Customer |-----+--ID |-----+--Name +--Product |--+--ID |--+--Name |--+--UnitPrice +--Qty
Теперь вам нужно предъявить все, что было заказано за последний месяц. Вы хотите привязать это к плоской сетке, так что вы послушно напишите плоский класс для привязки:
public class OrderDetailDto
{
public int ID { get; set; }
public DateTime OrderDate { get; set; }
public int OrderCustomerID { get; set; }
public string OrderCustomerName { get; set; }
public int ProductID { get; set; }
public string ProductName { get; set; }
public Decimal ProductUnitPrice { get; set; }
public int Qty { get; set; }
public Decimal TotalPrice
{
get { return ProductUnitPrice * Qty; }
}
}
До сих пор это было довольно безболезненно, но что теперь? Как мы превращаем связку OrderDetail
в связку OrderDetailDto
для привязки данных?
Вы можете поместить конструктор в OrderDto
, который принимает OrderDetail
, и напишет большой беспорядок кода отображения. Или у вас может быть класс статического преобразования. Или вы можете использовать AutoMapper, и вместо этого напишите:
Mapper.CreateMap<OrderDetail, OrderDetailDto>();
OrderDetailDto[] items =
Mapper.Map<OrderDetail[], OrderDetailDto[]>(orderDetails);
GridView1.DataSource = items;
Там. Мы только что взяли то, что в противном случае было бы отвратительным беспорядком бессмысленного картографического кода и уменьшило его на три строки (на самом деле это всего лишь два для фактического отображения).
Помогает ли это объяснить цель?
Ответ 2
Если у вас есть объект одного типа и вы хотите заполнить свойства объекта другого типа, используя свойства первого типа, у вас есть два варианта:
- Вручную написать код для такого сопоставления.
- Используйте инструмент, который автоматически обработает это для вас.
AutoMapper является примером 2.
Наиболее частое использование заключается в сглаживании моделей в объекты передачи данных (или, в общем, отображение через границы слоев). Что очень приятно в AutoMapper, так это то, что для обычных сценариев вам не нужно настраивать (соглашение по конфигурации).
Ответ 3
Сопоставление объектов между слоями. Хороший пример: Здесь