2015-12-02 6 views
0

Я вручную создаю преобразователь, который преобразует объект DAO в DTO. *** Кстати, я знаю AutoMappers, но я хочу сделать это вручную по нескольким причинам.Сопоставление списка объектов

Сам картограф не представляет труда. Мне нужна помощь в сопоставлении списка. Нужно ли обрабатывать каждое сопоставление объектов в цикле foreach или есть лучший способ создать сопоставитель, который может обрабатывать как отображение одного объекта, так и списка объектов?

Моего объекта DAO выглядит следующим образом:

MyObjectDao 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

И скажу, мой объект DTO выглядит следующим образом:

MyObjectDto 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string SomeOtherProperty { get; set; } 
} 

И мой картограф так просто, как это:

public MyObjectDto ConvertFromDaoToDto(MyObjectDao daoObject) 
{ 
    MyObjectDto dtoObject = new MyObjectDto(); 
    dtoObject.Id = daoObject.Id; 
    dtoObject.Name = dtoObject.Name; 

    return dtoObject; 
} 

Как я уже упоминал выше, я могу пройти цикл FOREACH для обработки отображения каждого объекта DAO объекту DTO, но это e лучший способ обработки списка объектов?

+1

Я не совсем уверен, что вы просите. Вам просто нужен простой способ превратить список «MyObjectDao» в список «MyObjectDto»? Если это так: 'MyDAOList.Select (ConvertFromDaoToDto)' получит вам 'IEnumerable'. Добавьте '.ToList()', если вам действительно нужен список. –

+0

Вот что я просил. Спасибо! MyDaoList.Select обрабатывать преобразование списка объектов Dao в Dto. – Sam

ответ

0

Вы можете использовать AutoMapper.

Я также хотел бы создать класс MyObjectDtoMapper инкапсулировать преобразования:

public class MyObjectDtoMapper 
{ 
    public MyObjectDtoMapper() 
    { 
     // configure AutoMapper here 
    } 

    public MyObjectDto Map(MyObjectDao daoObject) 
    { 
     var dtoObject = // map from daoObject with AutoMapper 
     return dtoObject; 
    } 

    public IEnumerable<MyObjectDto> Map(IEnumerable<MyObjectDao> daoObjects) 
    { 
     return daoObjects.Select(Map); 
    } 
} 
+0

Помните, что для простого PAPO Automapper, вероятно, немного переборщит. Плюс это один из самых медленных карт. –

+0

@JamieR Я бы не сказал, что это перебор, я считаю, что это очень чистый подход, особенно когда классы растут. Говоря о скорости - вы можете быть правы, но, честно говоря, я не заметил никаких проблем с производительностью. – gisek

+0

На самом деле все сводится к мнению, но я предпочитаю ValueInjector над automapper, особенно для скорости, и это чище. –