gpt4 book ai didi

hibernate - DTO 到实体以及实体到 DTO

转载 作者:行者123 更新时间:2023-12-02 23:10:39 25 4
gpt4 key购买 nike

我们将使用 DTO 向表示层发送数据或从表示层发送数据。我们有这样的层:

  • 外观
  • 应用服务
  • 域名

我们使用 Dozer 来帮助我们将实体转换为 dto。但我现在有两个问题:

  1. 从entity到dto我们可以用dozer,但是从dto到entity我们可以用dozer吗?如果是,如何?
  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?
}
}

选项 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;
}

选项 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;
}

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

最佳答案

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

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

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

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

关于hibernate - DTO 到实体以及实体到 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13899291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com