Mamy używać DTO do wysyłania danych do iz warstwy prezentacji. Mamy warstwy jak:DTO do Entity and Entity to DTO
- elewacji
- appService
- domeny
i musimy używać Dozer pomóc nam konwertować podmiot do DTO. ale mam 2 pytanie teraz:
- od podmiotu do DTO możemy wykorzystać dozownik, ale z dto do jednostki możemy użyć dozownik? Jeśli tak, jak?
- Gdzie ja mam tworzyć encje? w fasadzie lub DTOAsembler?
na przykład, muszę zarejestrować książkę. Podmiot wygląd książki jak:
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;
..
}
}
a my hav 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?
}
}
opcję 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;
}
opcja 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;
}
Jedna jest lepsza? Lub może być lepiej wdrożone ...?
Szczerze mówiąc, trzymałbym się z dala od Dozera. Używamy go w moim bieżącym projekcie i nienawidzę go: zmusza cię do robienia pewnych rzeczy ręcznie lub całkowitego zepsucia enkapsulacji twoich obiektów przez dodanie seterów, których tam nie powinno być. A niektóre operacje muszą być wykonywane bez tego. I największy problem: jeśli zmienisz nazwę nieruchomości, wszystko się skompiluje, ale spowoduje niepoprawne wyniki tylko w środowisku uruchomieniowym. Przekształcanie DTO w byty i odwrotnie jest żmudne, bt to proste. Wykonanie go ręcznie zapewnia zachowanie enkapsulacji i pozwala na refaktoryzację. –
To prawda! Jeśli coś się zmieni, można go znaleźć w środowisku uruchomieniowym! Jaka jest twoja rada na temat mojego pytania 2? – tobato
Wolę mieć metodę, która po prostu kopiuje z BookDTO do Księgi i nie dba o to, skąd pochodzi Księga. –