【问题标题】:JAX-RS : Model and Best practicesJAX-RS:模型和最佳实践
【发布时间】:2012-09-04 02:58:41
【问题描述】:

我有一个 JAX-RS 服务(我使用 Jersey),现在我必须做客户端。我想知道你们是如何处理模型对象的。 您是否将模型类放在不同的 jar 中以便在客户端和服务器之间共享它?您总是使用 DTO 还是有时(总是?)返回 jpa 实体。

我必须使用的服务(我没有创建它,但我可以修改它)经常返回实体,所以我想知道如果我将这些类外部化是不是有点奇怪。

你怎么看?你用来做什么?

【问题讨论】:

    标签: java spring jersey jax-rs


    【解决方案1】:

    这取决于项目的复杂性以及您在其中使用 JAX-RS 的目的:

    • 对于非常简单的项目,我不会再创建一个 DTO 层
    • 对于像您这样的项目,它似乎使用 JAX-RS 只是将数据从 java 客户端移动到 java 服务器,我也不会再创建一层。这是因为您负责两端(客户端和服务器),并且因为您在两个地方重用相同的对象(将它们放在单独的 jar 和 maven 模块中是个好主意)
    • 对于使用 JAX-RS 向外部客户端公开 API 的项目,最好使用 DTO 将模型与 API 分开,这样它们就可以独立发展。例如,您并不总是希望通过 API 公开所有字段,或者在更改模型中的某些内容时破坏您的客户端。

    稍后编辑

    • 对于仅将模型数据字段的子集传输到客户端的项目,出于效率原因,DTO 层很有用

    【讨论】:

    • 恕我直言,通常需要 DTO 层有几个原因:1)关注点分离 2)输出大小优化。就我而言,有些服务返回的数据量比较大,我需要 DTO 对象来只发送相关字段。这是我第一次使用 jax-rs,但我想一个好的做法(我的意思是,让事情变得非常干净,即使这样做需要时间)是外部化 DTO 层和服务接口。没有?
    • 这取决于,正如我所说的。我认为您可能需要(几乎)客户端中的所有字段用于用户界面。但是 JPA 实体只是 POJO,并不是将它们放在客户端上。而且我认为只维护一层而不是两层的好处超过了客户端上 JPA​​ 注释的“丑陋”。
    猜你喜欢
    • 2015-04-16
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多