不同层次的实体组合

Entity assemblage in different layers

假设我有以下 类:

@Entity
public class Book {
...
}

@Repository
public class BookRepositoryImpl implements BookRepository {    
...
}

@Service
public class BookServiceImpl implements BookService {
...
}


@Entity
public class Author{
...
}

@Repository
public class AuthorRepositoryImpl implements AuthorRepository {
...
}

@Service
public class AuthorServiceImpl implements AuthorService {
...
}

现在我想保存一本有作者的书。对于我的 BookService,我以某种方式将 BookDto 传递给除作者以外的所有信息,并且作为第二个参数,我传递了作者 ID。现在要保存我的书,我必须 assemble 书实体。哪一层是创建它的正确层?我看到很少的可能性,但我不确定哪种方法是正确的:

哪种方法是正确的,为什么?在我看来,一个合乎逻辑的解决方案是第一个,但是我不喜欢将实体 assemble 与我的服务中可能存在的某些业务逻辑混合在一起的想法。是否有一种模式可以将业务逻辑与技术解决方案分开?

您可以使用BookingService.createBook到assemble数据。因为一本书必须至少有一个作者。服务层用于业务逻辑。您需要将所有数据指定到该层中。您可以从 AuthorService 调用 AuthorRepository 但您必须从 BookService[ 调用 AuthorService =25=]。因为BookService不能直接使用AuthorRepository。因此,在 AuthorService 上定义一个方法以通过 ID 获取作者并从 BookService 调用 AuthorService 服务方法。您可以通过它的服务层访问每个存储库,因为要获取数据,每个服务在这些数据背后都有一些逻辑 return。每个服务层都负责其存储库层。

所以定义AuthorService.findAuthorById(long id)然后从BookService和assemble数据在bookservice调用这个方法