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

如何使用Spring Data JPA获得域驱动的设计架构?

陶飞鸿
2023-03-14

我正在开发一个Spring应用程序,它使用Spring Data JPA访问数据层。

因此,基本上我有n个实体类和n个相关的存储库类来访问与实体类相关的数据库表的数据,如下所示:

@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface EntityType1DAO extends JpaRepository<EntityType1, Long> {

   //@Query("FROM Room WHERE accomodation = :id")
   List<EntityType1> findByEntityType1(EntityType1 entityType1);

}

@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface EntityType2DAO extends JpaRepository<EntityType2, Long> {

   List<EntityType2> findByEntityType2(EntityType2 entityType2);

}

...........................................................................
...........................................................................
...........................................................................

@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface EntityTypeNDAO extends JpaRepository<EntityTypeN, Long> {

   List<EntityTypeN> findByEntityTypeN(EntityTypeN entityTypeN);

}

基本上,通过这种方式,我有n个域类被**n个存储库类访问。

因此,我发现了这篇关于如何在Spring应用程序中获得领域驱动设计的有趣文章:http://static.olivergierke.de/lectures/ddd-and-spring/

阅读前一篇文章,它说:

存储库-Spring组件,通常是一个Spring数据存储库接口。可以依赖于实体和值对象,以聚合根实体为中心。

还是怎样?

使用Spring Data JPA在我的应用程序中获得域驱动设计,有什么好的架构解决方案?

共有1个答案

谷泽宇
2023-03-14

您不创建一个新类作为聚合。取而代之的是选择一个退出的。通常,它会自我呈现,在您的示例中,它可能是房间

因此,您将有一个用于房间的存储库(roomrepositoryroomes)。您可以使用它来保存和加载房间,包括根据您需要的各种标准查找房间。

为了访问(和操作)例如RoomPicture,您加载RoomPicture,导航到RoomPicture,操作它并保存JPA会话,这实际上意味着您正在修改房间。

 类似资料:
  • 我正在学习DDD概念,为了加强我的理解,我正在研究一些现实世界的例子。 我知道一个聚合应该只有一个通过根实体的入口点,一个聚合应该只有一个存储库(如果我完全理解错了,请纠正我) 现在假设有特定类型的消耗品,并且这些消耗品是从配送中心发送的。发送特定类型的消耗品取决于它们的数量,我的意思是,如果其中一个消费者对A型和B型的临界数量为10,并且这些项目的数量低于10,那么配送中心发送A型和B型消耗品。

  • 本文向大家介绍谈一下领域驱动设计相关面试题,主要包含被问及谈一下领域驱动设计时的应答技巧和注意事项,需要的朋友参考一下 主要关注核心领域逻辑。基于领域的模型检测复杂设计。这涉及与公司层面领域方面的专家定期合作,以解决与领域相关的问题并改进应用程序的模型。在回答这个微服务面试问题时,您还需要提及DDD的核心基础知识。他们是: DDD主要关注领域逻辑和领域本身。 复杂的设计完全基于领域的模型。 为了改

  • 本文向大家介绍什么是领域驱动设计(DDD)相关面试题,主要包含被问及什么是领域驱动设计(DDD)时的应答技巧和注意事项,需要的朋友参考一下 专注于核心领域逻辑 在模型上找到综合的设计 不断与领域专家合作,改进应用程序模型并解决与领域相关的问题

  • null 到目前为止,很容易。如果我们试图将规范应用到存储库,而又不破坏DDD模式或存在性能问题,那么问题就会出现。 应用规范的可能方法: 1)经典方法:在领域层使用领域模型进行规范 null null 3)与2)类似,但将规范作为持久层的一部分 这不起作用,因为域层需要参考规范。它仍将取决于持久层。 我们将在持久层中拥有业务逻辑。这也违反了DDD模式 4)与3类似,但使用抽象规范作为接口 nul

  • 以前,我会将存储库注入到服务层。所以我的问题是--可以将存储库注入域对象,以便它们能够执行业务规则吗?