Tôi có 2 thực thể - phim và diễn viên - có mối quan hệ M: N. Khi thiết kế các đối tượng DTO cho các thực thể này, tôi không chắc chắn về cách thức chính xác để đi.Truyền dữ liệu Đối tượng của các thực thể có mối quan hệ M: N hoặc 1: N
Movie
@Entity
@Table(name = "Movies")
public class Movie extends AbstractBusinessObject {
private String name;
private String short_info;
@ManyToMany
private Map<String, Actor> cast;
}
diễn viên
@Entity
@Table(name = "Actors")
public class Actor extends Person{
private String name;
@ManyToMany(mappedBy = "cast")
private Set<Movie> movies;
}
Bây giờ liên quan đến DTOs: tôi đã đi qua hai cách khác nhau như thế nào để đối phó với 1: N và M: N mối quan hệ .
Tiết kiệm chỉ ID:
public class MovieDto {
private String name;
private String short_info;
// Long represents Actor's ID
private Map<String, Long> cast;
}
Tuy nhiên như đã nói here Tôi nghĩ rằng Instead of performing many remote calls on EJBs, the idea was to encapsulate data in a value object
, và phương pháp này phá vỡ rõ quy tắc.
Lưu DTO trong DTO: Một cách tiếp cận khác là lưu trữ Dto của Actor, thay vì ID của Actor.
public class MovieDto {
private String name;
private String short_info;
private Map<String, ActorDto> cast;
}
Dường như với tôi cách tiếp cận này sẽ nhanh hơn, vì tôi không phải gọi cơ sở dữ liệu mỗi lần tôi cần hiển thị tên của diễn viên.
Giả định này có chính xác không, hay tốt hơn là chỉ lưu trữ ID (thậm chí xem xét mức tiêu thụ không gian của phương pháp thứ hai)?
Cộng với phương pháp thứ hai sẽ dẫn đến một số DTO cho một thực thể. Ví dụ, tôi không cần phải biết những gì phim có diễn viên đóng trong khi nhìn vào một "trang phim", nhưng tôi cần nó khi nhìn vào một "trang diễn viên".
Bạn có thực sự cần dtos không? Chúng thường chỉ là mã trùng lặp. Bạn có thể trả về một thực thể, chỉ có trường id được đặt –