当前位置: 首页 > 知识库问答 >
问题:

带有spring数据的六边形体系结构

虞唯
2023-03-14

服务->逻辑所在的位置(接口及其实现)。

实体->它们将在整个应用程序中使用。

Repository->基础结构层必须实现的接口。

基础结构层实现了存储库接口、JPA实体、对数据库的调用(hibernate)以及一些将JPA实体转换为核心实体的函数(映射器?)。

Spring data有一种非常有用的实现CRUD操作的方法:

public interface UserRepository extends JpaRepository<User, Integer> {
}

但是,我认为如果我使用spring数据,如果UserRepository是核心层的一部分,JPA实体就不会是基础结构层的一部分。这意味着核心实体将毫无用处。我应该创建另一个属于核心层的UserRepository接口,还是缺少了什么?

更新:

我对使用spring数据的担忧来自于我必须在域中包含JPA实体,这在理论上违反了六边形体系结构。

所以我想把域实体和JPA实体分开。但如果这样做,我不知道Spring数据的存储库应该去哪里,也不知道如何将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数据的接口应该在基础结构部分,因为稍后我需要将JPA实体映射到域实体,并且可能需要使用另一个类(和适配器?)去做那个映射。这种做法是正确的,还是有其他办法?很抱歉发了这么长的帖子,我希望我已经说清楚了。

共有1个答案

夏谦
2023-03-14

下面是一篇关于如何将数据库连接到应用程序的好文章:http://www.dossier-andreas.net/software_architecture/ports_and_adapters.html

您要做的是创建一个“辅助端口”和“辅助适配器”。

“辅助端口”(=接口)描述了要做什么,但没有框架依赖关系。“辅助适配器”(=实现)使用JPA存储库。

JPA实体不能是您的域。它描述了数据是如何存储在数据库中的。所以JPA实体不能在“辅助端口”中使用,只能在您的域中使用。

“辅助适配器”将需要将您的域转换为JPA实体。

 类似资料:
  • 我正在学习DDD和六角结构,我想我已经掌握了基本知识。然而,有一件事我不确定如何解决:我如何向用户显示数据? 例如,我得到了一个简单的域,其中包含一个带有某些功能的Worker实体(某些方法会导致实体更改)和一个WorkerRepository,这样我就可以持久化Worker了。我得到了一个应用程序层,其中包含一些命令和命令总线来操作域(比如创建员工和更新他们的工作时间,持久化更改),以及一个基础

  • 我正在将nTier架构迁移到六边形架构中。我的域现在定义得很好,我有所有基础设施依赖项的接口。查看数据库存储库,我有几个数据库,在下面的一侧有一个类实现每个repo。我的问题是关于数据库依赖项的正确方法是什么: 1-在域端有一个接口来处理数据访问,然后依赖于基础设施实现,并有一个类作为所有数据库存储库的入口点,就像一个facade,从那里调用所有存储库实现。这种方法与我在nTier应用程序中已经使

  • 这对我来说是棘手的部分。我想实现的逻辑,但对我来说,在应用程序层实现这一点没有意义,因为持久性上下文在基础结构层(例如或)。但是,如果我正确理解六边形结构,我就不能直接在基础结构层实现接口,因为基础结构层不应该知道域层。 我错过了什么?

  • 我读了很多关于六边形体系结构的书,但是在我看到的所有例子中,所有的文件夹和类ubication都是不同的,这对我来说有点困惑。 我用下面的文件夹结构做了一个简单的Spring Boot应用程序。适配器文件夹包含存储库接口和rest控制器的实现。 在domain文件夹中,我有model,它是一个简单的POJO,ports,它是服务类的接口,包含了产品的所有业务逻辑,还有repository的接口,它

  • 主要内容:1. Data Access/Integration(数据访问/集成),2. Web 模块,3. Core Container(Spring 的核心容器),4. AOP、Aspects、Instrumentation 和 Messaging,5. Test 模块Spring 框架基本涵盖了企业级应用开发的各个方面,它包含了 20 多个不同的模块。 图1:Spring架构图 上图中包含了 Spring 框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选

  • 我被一个似乎很容易解决的问题所困扰,但我似乎找不出正确的公式。 我有一个立方体坐标系中六边形群的列表。我知道群的立方体坐标,但我需要计算给定群中一个小六边形的“全局”坐标。 例如,在下图中,我知道和的坐标。如果每个组都有相同的半径(在本例中半径为1),并且它们之间不重叠(让我们把它看作是从0、0、0开始的组的平铺,从而创建一个十六进制网格),那么我如何计算GroupB中心平铺的坐标呢? 任何帮助都