为什么JHipster DTO是在服务层而不是在REST层生成的?

时间:2017-12-03 17:14:12

标签: jhipster

我们已经启动了一个JHipster项目并使用了DTO。一开始我不喜欢,但是,这让我们真正为我们的REST层定制了我们的DTO:完美。

但是现在我们正在向项目添加JMS,我们意识到我们的消息监听器需要访问我们的服务层......但是服务返回适合REST层的DTO,而不是消息传递层。

为什么JHipster在服务层生成DTO?为什么不在REST层?这样,REST和JMS层(以及之后的其他层)都可以访问仅处理实体的服务层。然后,REST和JMS都将拥有适合自己需求的自己的DTO。

知道为什么这是在第一个地方完成的吗? 感谢

1 个答案:

答案 0 :(得分:4)

在JHipster中,你实际上有DTO和VM:

  • DTO(数据传输对象)位于服务层中:它们用于从事务层获取数据。想法是在服务层内部有JPA实体,它们具有关系(延迟加载Hibernate),并且服务层返回不由Hibernate管理的DTO(不再延迟加载)。实体和DTO之间可能没有一对一的关系:也许DTO聚合了几个实体,也许它们有更多的字段(或更少的字段!),这些都取决于您的商业模式。
  • VM(视图模型)位于视图层中。这个措辞来自Angular,我们经常在这里使用" vm"对象。我们的想法是拥有特定于您的视图层的对象,因此对客户端应用程序进行编码更容易,更安全且更高效。一个DTO可能有多个VM,因为DTO的数据可能会用在几个不同的屏幕上。通常,VM是通过JSON从Java后端传输到JavaScript前端的。

这些图层都不是JHipster所必需的。您通常会:

  • 只是简单CRUD的实体
  • 商家代码的实体和DTO
  • 存在特定复杂视图时的实体和VM
  • 当一切都很复杂时,实体,DTOS和VM