2012-02-26 2 views
0

только что зарегистрирован. Первый вопрос :) Если у меня есть объект моей модели домена, у которого есть свойство Name и свойство List of States. Кроме того, что государство имеет название, список кантонов собственности, далее, в кантоне есть муниципалитеты, в самом конце город.Создание DTO, бит путать

Для exaplain лучше: Я пытаюсь seriliaze Страна объект с CountryDTO и мой застройщик выглядит следующим образом:

public CountryDTO(Country x) 
    { 
     Name = x.Name; 
     StateList = new List<StateDTO>(); 
     foreach (State state in x.States) 
     { 
      StateDTO stateDto = new StateDTO(state); 
      StateList.Add(stateDto); 
     }   
    } 

Но когда я иду глубже StateDTO, который выглядит, как этот>

public StateDTO(State x) 
    { 
     Name = x.Name; 
     CountryDTO Country = new CountryDTO(x.Country); 

     CantonList = new List<CantonDTO>(); 
     foreach (Canton c in x.Cantons) 
     { 
      CantonDTO cantonDto = new CantonDTO(c);    
      CantonList.Add(cantonDto); 
     } 
    } 

Поскольку мой StateDTO должен знать о своем родительском объекте своей страны, у меня есть эта строка CountryDTO Country = new CountryDTO (x.Country); что является проблемой (возможно, рекурсивной ссылкой), это произойдет в кантонах с объектом State как родительским и т. д. Итак, как загрузить этот родительский объект и избежать этой ошибки. Мне нужна ссылка на родительский объект, такой как Country.Name no CountryName как строка.

Надежда, мне было достаточно ясно :)

ответ

0

Я думаю, ваша проблема пытается слишком много, чтобы зеркало в том, что у вас есть модель домена. вам было бы лучше рассмотреть то, что вам действительно нужно на стороне клиента, и сделать dto отражением этого, а не дублированием того, что у вас есть в домене. это особенно верно в том смысле, что каждый раз, когда вы обслуживаете звонок к вашему сервису, вы сериализуете всю иерархию для всего, что есть в стране. похоже, слишком много, чтобы отправить его почти во всех случаях. вот хороший пост, который описывает это лучше:

http://davybrion.com/blog/2012/02/dtos-should-transfer-data-not-entities/

0

Вы можете изменить: public void StateDTO(State x) к public void StateDTO(State x, CountryDTO parent), а затем вызвать его с StateDTO stateDto = new StateDTO(state, this);.

Оператор this обращается к экземпляру CountryDTO, и вы можете передать его детям.

Смежные вопросы