2015-02-17 1 views
0

У меня вопрос о представлении класса DTO. У меня есть две таблицы в моей базе данных, где один имеет два внешних ключей на другой, например:Классы DTO, представляющие внешние ключи по нескольким значениям

book(id, author_name, author_age) 
author(name, age, telephone) 

где книга author_name и author_age являются внешними ключами на имя автора и возраст.

Как правило, лучший способ реализовать эту ситуацию на классе DTO? Внутри книги DTO, это лучше сделать что-то вроде:

public class Book { 
    private String id; 
    private Author author; 
} 

или что-то вроде

public class Book { 
    private String id; 
    private String author_name; 
    private int author_age; 
} 

?

ответ

1

DTO - это объекты, которые используются для простоты передачи значений по каналу связи большую часть времени через http или https.

Примечание: Сделайте свою недвижимость открытой, а не частной.

Мы должны сделать это как можно проще.

так что используйте его как

public class Book { 
    public String id; 
    public String author_name; 
    public int author_age; 
} 

Если бы сравнить DTO без объекта Автор против DTO с объектом Автор превращается в JSON или XML, DTO без Автор будет меньше по размеру.

При использовании автора внутри книги вы просто добавляете дополнительную оболочку (для author_name и author_age), которая стоит вам больше по каналу связи.

в случае, если книга имеет несколько авторов или в случае одного до многих отношений вам нужно сделать так:

public class Book { 
    public String id; 
    public List<Author> authors; 
} 

Примечания: Но убедитесь, что автор не должен иметь обратно свойство с книгой например, следующий.

public class Author 
{ 
    public Book book; 
} 

В некоторых клиентских рамках, таких как нокаут, он создает петлю с наблюдаемыми.

+0

Логично, что только книга должна иметь ссылки на автора, а отношения - один к одному. вероятно, мне нужно сделать какой-то запрос о том, что книга написала автору, но это не о слое DTO – giozh

+0

@giozh Да DTO должен быть без автора, чтобы сделать его небольшим по размеру, см. обновленный ответ. –

+0

@giozh это просто создает дополнительную оболочку, которая занимает больше полосы пропускания. –

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