gpt4 book ai didi

Spring Boot,决定为REST和JPA分别创建DTO对象

转载 作者:行者123 更新时间:2023-12-03 03:53:25 25 4
gpt4 key购买 nike

我想传统上来说,对于RESTful Web服务,一种类型的DTO对象用于POJO/JSON转换,而另一种DTO对象用于数据库实体/POJO转换?

Spring Boot应该更自以为是,更易于使用,但是您是否仍将不同的DTO对象类型用于JSON和数据库实体表示,还是将实体对象直接转换为JSON?

最佳答案

让我分享我的看法。

首先,我认为您的问题与Spring Boot无关。 Spring Boot只是提供了一种花哨且轻巧的方式来启动应用程序,并允许以更简单的方式构建应用程序。
但是,您仍然可以在其中使用rest Controller ,从那时起,对于其他任何类型的应用程序,它都没有太大区别。

因此,您实际上要问的是,维护JSON对象的抽象并将其转换为业务逻辑实体对象,然后再将其再次转换为Database对象还是足够维持2个级别并抛弃Json是否有意义?等级。

我认为答案是“取决于”。

首先,总体而言,目前的趋势是简化。因此,也许足以维持1级对象。

这种方法有很多优点:

  • 显然,维护
  • 的代码更少
  • 开发和测试的速度(应该检查POJO,应该测试转换器等)
  • 执行速度-您无需在转换上浪费CPU时间。一种明显的含义。
  • 不太明显:内存消耗。假设您使用DAO返回的大量数据。假设它占用了10MB的内存(仅出于示例目的)。现在,如果您开始转换为业务实体,您将再花费10MB,如果它的A JSon对象也要花费10MB。关键是所有这些对象可以同时存在于内存中。当然,如果您正确实现了所有措施,GC可能会照顾好他们,但这是另一回事。

  • 然而,这种简化存在一个缺点。

    一言以蔽之,我称之为 promise

    应用程序中有三种类型的API。
  • 在Web Service级别上 promise 使用的API-JSon结构。
    各种客户端(完全不需要使用JVM)正在针对您的Web服务运行并消耗数据。因此,他们确实希望您提供给定结构的JSon对象。
  • 您企业的API。如果您的业务逻辑层非常复杂,那么您可能有整个团队来开发该逻辑。因此,您通常在团队之间的API级别上工作。
  • DAO的级别-实际上与业务逻辑相同。

  • 所以现在,如果说,例如,在一个级别上更改该API会发生什么。这是否意味着所有级别都会被破坏?

    例子

    可以说,我们不保持“JSon”级别。在这种情况下,如果我们在业务逻辑级别更改API,则JSON也将自动更改。所有其他框架将为我们愉快地转换对象,并且用户很可能会获得其他数据。

    另一个例子

    可以说,您的BL层提供了一个Person实体,如下所示:
    class Person {
    String firstName;
    String lastName;
    List<Language> languages;
    }

    class Language {
    ...
    }

    现在,假设您有一个使用REST服务的UI,该服务根据请求提供“人员”列表。如果UI中有2个不同的页面怎么办。仅显示人称的人(在这种情况下,提供一个人说的语言列表是没有意义的)。
    但是,在第二页中,您想获取完整的信息。

    因此,您最终将暴露2个Web服务或通过一些参数使现有的Web服务复杂化(这样的参数越多,它与其余参数的相似性就越小:))
    也许分离会在这里有所帮助?我不知道。

    底线。
    我想说的是,只要您可以没有这种分离地生活-就这样做。它甚至可以用于相当大的项目。当然,它可以适用于中小型项目。

    如果您发现自己在修补程序方面苦苦挣扎,并且觉得这样的分离可以解决问题,请执行分离。

    希望这有助于理解含义并选择最适合您的方法

    关于Spring Boot,决定为REST和JPA分别创建DTO对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35238466/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com