Chúng tôi sử dụng DTO để gửi dữ liệu đến và từ lớp trình bày. Chúng tôi có các lớp như:DTO để thực thể và thực thể cho DTO
- mặt tiền
- appService
- miền
Và Chúng tôi có sử dụng Dozer để giúp chúng tôi chuyển đổi đơn vị để dto. Nhưng tôi có 2 câu hỏi ngay bây giờ:
- từ thực thể đến chúng tôi có thể sử dụng dozer, nhưng từ dto đến thực thể chúng ta có thể sử dụng dozer? Nếu có, làm thế nào?
- Tôi tạo ra thực thể ở đâu? ở mặt tiền hoặc DTOAssembler?
ví dụ: tôi phải đăng ký một cuốn sách. cuốn sách Entity giao diện của như:
Book{
public Book(BookNumber number,String name){
//make sure every book has a business number,
//and the number can't change once the book is created.
this.bookNumber = number;
..
}
}
và chúng tôi hav một DTOAssembler:
BookDTOAssembler{
BookDTO toDAO(bookEntity){
...
}
BookEntiy fromDTO(book DTO,BookRepository bookRepository){
//1.Where should i create book entity?
//2.Is there any effective way to convert dto to entity in java world?
}
}
tùy chọn 1
the BookManagedFacade has a registerBook function:
public registerBook(bookDTO){
Book book = BookDTOAssembler.fromDTO(book DTO);
}
//Create book in BookDTOAssembler.fromDTO
public static BookEntiy fromDTO(BookDTO bookDTO,BookRepository bookRepository){
//book is never registered
if (0==bookDTO.getBookID()){
Book book = new Book(bookRepository.generateNextBookNumber(),bookDTO.getName());
}else{
//book is been registed so we get it from Repository
book = bookRepository.findById(bookDTO.getBookID());
}
book.setAuthor(bookDTO.getAuthor);
...
return book;
}
tùy chọn 2
the BookManagedFacade has a registerBook function:
public registerBook(bookDTO){
Book book = new Book(bookRepository.generateNextBookNumber(),bookDTO.getName());
book = BookDTOAssembler.fromDTO(book DTO,book);
}
//add another function in BookDTOAssembler.fromDTO
public static BookEntiy fromDTO(BookDTO bookDTO,Book book){
book.setAuthor(bookDTO.getAuthor);
...
return book;
}
Với một cái tốt hơn? Hoặc nó có thể được thực hiện một cách tốt hơn ..?
Thành thật mà nói, tôi sẽ tránh xa Dozer. Chúng tôi đang sử dụng nó trong dự án hiện tại của tôi, và tôi ghét nó: nó buộc bạn phải làm một số thứ bằng tay, hoặc để hoàn toàn phá vỡ đóng gói của các đối tượng của bạn bằng cách thêm setters mà không nên có. Và một số hoạt động phải được thực hiện mà không có nó anyway. Và vấn đề lớn nhất: nếu bạn tình cờ đổi tên một thuộc tính, mọi thứ sẽ biên dịch tốt, nhưng sẽ tạo ra kết quả không chính xác chỉ khi chạy. Chuyển đổi DTO thành các thực thể và ngược lại là tẻ nhạt, bt nó đơn giản. Làm theo cách thủ công đảm bảo đóng gói được bảo toàn và cho phép tái cấu trúc. –
Đó là sự thật! Nếu bất cứ điều gì thay đổi, nó có thể được tìm thấy trong thời gian chạy! Lời khuyên của bạn về câu hỏi 2 của tôi là gì? – tobato
Tôi muốn có một phương thức chỉ sao chép từ một BookDTO đến một cuốn sách, và không quan tâm đến Sách đến từ đâu. –