DTO到实体和实体到DTO

我们将使用DTO在表示层之间来回发送数据。我们有像这样的图层:

  • facade
  • appService
  • domain

并且我们使用推土机来帮助我们将实体转换为dto。但是我现在有两个问题:

  1. 从实体到dto,我们可以使用推土机,但是从dto到实体,我们可以使用推土机吗?如果是,如何?
  2. 我应该在哪里创建实体?在外观或DTOAssembler中?

例如,我必须注册一本书。这本书的实体外观如下:

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;

..

}

}

我们有一个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?

}

}

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;

}

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;

}

用一个更好?或者它可以以更好的方式实现..?

回答:

通常,您不将对象(域实体的DTO表示形式)传输回服务器。因为这样做会破坏封装,因为任何人都可以将更改应用于DTO,然后将信息发送回去。

相反,您应该创建一个用于修改对象的服务接口,因为它允许 将更改应用于其模型。

因此,服务实际上分为两部分:

  1. 查询部分,用于获取所有实体的DTO表示形式
  2. 用于将更改应用于实体的命令部分

以上是 DTO到实体和实体到DTO 的全部内容, 来源链接: utcz.com/qa/412172.html

回到顶部