Для чего автокартопостроитель?

Для чего автокартопостроитель?

Как это поможет мне с моим доменом и слоями контроллера (asp.net mvc)?

18
задан CodeNotFound 26 April 2018 в 09:25
поделиться

3 ответа

Может быть, пример поможет здесь....

Допустим, у вас есть красивая нормализованная схема базы данных, как эта:

Orders       (OrderID, CustomerID, OrderDate)  
Customers    (CustomerID, Name)  
OrderDetails (OrderDetID, OrderID, ProductID, Qty)  
Products     (ProductID, ProductName, UnitPrice)  

И допустим, вы используете красивый O/R mapper, который возвращает вам хорошо организованную модель домена:

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; }
    }
}

Пока это было довольно безболезненно, но что теперь? Как нам превратить кучу OrderDetails в кучу OrderDetailDtos для связывания данных?

Вы можете поставить конструктор на OrderDto, который возьмет OrderDetail, и написать большой маппинг-код. Или у вас где-нибудь может быть статический класс преобразования. Или вы можете использовать AutoMapper и написать вместо него:

Mapper.CreateMap<OrderDetail, OrderDetailDto>();
OrderDetailDto[] items =
    Mapper.Map<OrderDetail[], OrderDetailDto[]>(orderDetails);
GridView1.DataSource = items;

There. Мы просто взяли то, что в противном случае было бы отвратительным бессмысленным маппинговым кодом и сократили его до трех строк (на самом деле только две для фактического маппинга).

Это помогает объяснить цель?

30
ответ дан 30 November 2019 в 07:44
поделиться

Объекты карты между слоями. Хороший пример: здесь

0
ответ дан 30 November 2019 в 07:44
поделиться

Если у вас есть объект одного типа, и вы хотите заполнить свойства объекта другого типа, используя свойства с первого Введите, у вас есть два варианта:

  1. вручную написать код, чтобы сделать такое отображение.
  2. Используйте инструмент, который автоматически справится с этим для вас.

Automapper является примером 2.

Наиболее распространенное использование состоит в том, чтобы сглаживать модели в объекты передачи данных (или, в целом, сопоставлением по границам слоя). Что очень приятно о AuthoAtpster, так это то, что для общих сценариев вам не нужно делать какие-либо конфигурации ( соглашении по конфигурации ).

3
ответ дан 30 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: