We're to use DTO's to send data to and from the presentation layer. We have layers like:
- facade
- appService
- domain
And We have use Dozer to help us convert entity to dto. But i have 2 question now:
- from entity to dto we can use dozer, but from dto to entity can we use dozer? If Yes, How?
- Where shoud i create entity? in facade or DTOAssembler?
for example,I have to register a book. the book Entity look's like:
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; .. } }
and we hav a 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? } }
option 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; }
option 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; }
With one is better? Or It can be implemented in a better way..?