【问题标题】:Is it a good practice to use the entity beans for front end将实体 bean 用于前端是否是一种好习惯
【发布时间】:2020-01-15 05:50:50
【问题描述】:

我将 Thymeleaf 用于前端,将 Spring + Hibernate 用于后端。

建议将相同的实体 bean 用于前端,而不是创建 DTO。对于前端专有的属性,我们无论如何都可以使用@Transient,对吧?

我注意到在 PetClinic Spring Demo 应用程序中他们重用了模型。

【问题讨论】:

  • 请注意这不是一个大项目
  • 嗯,你可以,但它不是一个好习惯,你应该有一个域或模型类作为实体之上的层。
  • @Shubh 不是域类和实体类(在 hibernate java 世界中也一样?
  • 你对 jpa 实体感到困惑,它实际上是在 db 中持久化的。它上面有一个层。
  • 你能给我指出任何资源/教程吗?我的理解是jsp/view <-> json <-> controller <-> DTO bean <-> service <-> Entity bean <-> persistence。还需要其他豆子吗?

标签: spring spring-data-jpa entity-bean


【解决方案1】:

实体是领域驱动设计 (DDD) 的一部分,其设计的重要方面是拥有 ID。这些是为了代表您的实体,它们是系统中长期存在的对象,即在数据库、存储等中。

值对象/数据传输对象实际上是用于临时计算和短期传输,例如在视图中使用。

我猜你会在你的项目中使用 MVC。在这方面使用服务层之后的实体将与前端紧密耦合实体。这反过来又不利于 MVC 的灵活性。最好不要这样做。

【讨论】:

  • 那么遵循的做法是每次都将值从实体复制到视图对象?
  • 视图对象是否遵循任何命名约定或惯例?
  • 你应该复制整个条目,你应该只复制视图层中需要的字段
  • 追求价值。对象有时被称为 DTO(数据传输对象)
【解决方案2】:

您可以使用您的域实体而不是创建额外的视图对象或 DTO。主要是因为你说这不是一个大项目。

但是,不要仅仅为了您的前端需求而向您的域类添加属性。即使使用@Transient。这对我来说是代码气味。当您需要这样做时,请创建视图类或 DTO,而不是使用域对象。

【讨论】:

    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2021-05-04
    相关资源
    最近更新 更多