3

Я много читал о DTO здесь, на SO, в книгах и статьях, но я не уверен, правильно ли я это понял.Комплексная структура DTO

Мы используем DTO в нашем проекте, чтобы они были почти объектами объектов домена. По этой причине нам нужна сложная структура DTO. Есть несколько классов, расширяющих друг друга, композиции, совокупность и т. Д.

Вопрос более общий.

Правильно ли наследовать dto от другого или иметь ссылку на dto в другом dto?

ответ

3

ли право наследовать DTO от другого

Если они имеют общие свойства, то почему бы и нет?

есть ссылка в DTO на другой DTO

Там, безусловно ничего плохого в этом, необходимо учитывать следующее:

public class UserDto 
{ 
    public string Id { get; set; } 
    public string Username { get; set; } 
    public string Email { get; set; } 
    public AddressDto Address { get; set; } 
} 

public class AddressDto 
{ 
    public string AddressLine1 { get; set; } 
    public string AddressLine2 { get; set; } 
    public string City { get; set; } 
} 

Помните DTO являются просто тупые объекты, то есть они не имеют поведения (кроме получения/установки собственных данных). Те же правила применяются к DTO, как и для стандартных классов/объектов с архитектурной точки зрения, поэтому нет причин, по которым вы не должны следовать тем же принципам, если и когда сможете.

+0

Я думал, что я должен держать dto настолько просто, насколько я могу, поэтому, вместо того, чтобы хранить ссылку на другое dto, я должен сохранить его свойства. В UserDto у меня были бы адресная строка1, адресная строка2 и город, учитывая, что я буду использовать dto с WCF. – hgulyan

+0

Я читал, что есть некоторые проблемы с сложными DTO, используемыми в WCF Service. Например, круговые ссылки. – hgulyan

+1

@hgulyan Вы можете, конечно, сделать это, если хотите, однако, этот дизайн не подходит ко мне. Наличие свойств, являющихся самими объектами DTO, является приемлемым доходом (я бы сказал, предпочтительнее). WCF должен прекрасно обрабатывать сериализацию. «Я читал, что у них проблемы с сложными DTO ... круговыми ссылками *», это что-то elses-реализация и проблемы с моделью, без сомнения, различной сложности. Вы должны хотя бы * попробовать * сначала, прежде чем решите, что это не сработает. – James