我要开始一个新项目,学习spring boot、spring data和六边形架构。据我了解,六边形架构旨在将核心或域层与数据库操作(基础设施层)分开。我已经看到了这个架构的以下项目结构。
核心层有:
服务-> 逻辑去向(接口及其实现)。
实体 -> 这些将在整个应用程序中使用。
Repository-> 基础设施层必须实现的接口。
基础设施层实现了存储库接口、JPA 实体、对数据库的调用(休眠)以及将 JPA 实体转换为核心实体(映射器?)的某种功能。
Spring data 有一种非常有用的方式来实现 CRUD 操作:
public interface UserRepository extends JpaRepository<User, Integer> {
}
但是,我认为如果我使用 spring 数据,如果 UserRepository 是核心层的一部分,那么 JPA 实体将不会成为基础设施层的一部分。这意味着核心实体将毫无用处。我应该创建另一个属于核心层的 UserRepository 接口还是我遗漏了什么?
更新:
我对使用 spring 数据的担忧来自于我必须在域中包含 JPA 实体,这在理论上会违反六边形架构。
所以我正在考虑将域实体与 JPA 实体分开。但是如果我这样做,我不知道 Spring Data 的存储库应该去哪里,并且还找到一种将 JPA 实体转换为域实体的方法。
为了更好地说明,我将假设我需要从我的应用程序连接到数据库来读取用户表。
这可能是域实体:
public class UserDomain{
private String name;
....//More fields, getters, and setters.
据我了解,服务应该包含逻辑并操作域实体。
public interface UserService{
public void create(UserDomain user);
...
实施:
public class UserServiceImpl implements UserService{
public void create(UserDomain user) {
... //Calling the repository(Spring Data Repository?)
以上以及存储库接口是我认为的域(如果我错了,请纠正我)。接下来,基础设施由 JPA 实体组成
@Entity
@Table(name="users")
public class User{
@Column(name="name")
private String name;
... // More Fields, getters, and setters
我认为我调用 Spring Data 的接口应该在基础设施部分,因为稍后我需要将 JPA 实体映射到域实体中,也许我需要使用另一个类(和适配器?)来进行映射。这种方法正确还是有其他方法?抱歉发了这么长的帖子,我希望我已经说清楚了。