2012-02-26 83 views
0

刚注册。第一个问题:) 如果我在我的域模型实体国家有名称属性和国家列表属性。此外,该州有名称,地产名单,此外,广州有市镇,最后是城市实体。创建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);这是问题,(可能是递归引用),这会发生在州与他们的状态对象作为父,等等。 那么如何加载这个父实体,并避免这个错误。 我需要引用像Country.Name no CountryName这样的父对象作为字符串。

希望,我很清楚:)

回答

0

我认为你的问题是尝试太多,以反映在你有什么域模型。你最好考虑你真正需要在客户端做什么,并做出反映,而不是重复你在域中的内容。这一点尤其真实,因为每当您为您的服务提供服务时,您都会序列化一个国家/地区的所有内容。在几乎所有情况下都似乎太多了。这是一个很好的帖子,描述了这个更好:

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实例相反,您可以将它传递给子代。