何时在 Angular + Java 项目中使用 DTO 和 Matpstruct

2024-04-01

好吧,我有一个大项目,我想把它做好......但我什至不知道规范是什么。

Problem:我有几个具有关系的实体,我需要将它们一起显示在页面上。在视图中显示前 3 个事件。凡是Event有关系到事件实例, a 取消政策,并且对多个Pricing(截止日期)和多个活动笔记(根据您的注册状态过滤)

可能的解决方案:(假设我正在使用服务/可观察数据来获取数据,并且我拥有所有java和角度模型等)

A)在角度中获取事件,然后获取事件的实例、相关的定价、注释集以及每个实体自己的服务的取消策略。

B)创建 Java 服务,该服务返回一个自定义视图 - DTO,其中所有数据都编组在一起。

C)使用 Mapstruct 为每个实体创建 DTO/映射/等,我可以调用事件服务...

.....但是,如果我这样做,我是否需要为所有这些实体执行 DTO/映射...并且我是否需要为与这些对象有关系的每个实体执行此操作.. .然后这些实体服务需要only?返回 DTOs.. 现在这一切听起来太复杂了,尤其是因为我有 30 个实体.. 我只是把自己从 Mapstruct/DTO 世界吓跑了。

我缺少什么?

我使用 jhipster(Angular 5、Spring Boot、mapstruct 等)来使这一切变得半简单。


让我们稍微整理一下...

实际上,您不必被迫返回 DTO,您可以只返回实体。但是我不会鼓励这种习惯,因为您应该始终向外部世界隐藏您的数据库结构。因此,使用 DTO 始终是一个不错的选择,因为您可以选择仅映射实体中包含的信息子集。

现在让我们转到 MapStruct。默认情况下,MapStruct 会将实体中的所有内容映射到 DTO 中,反之亦然,而无需指定每个映射。在项目开始时,您可以选择拥有类似的实体和 DTO,然后让 MapStruct 为您完成工作,您只需说出映射的源和目的地,MapStruct 将通过 Reflection 构建映射器。然后,经过一些性能测试后,您可以选择仅对最耗时的映射进行一些调整。

我知道返回实体可以加快交付速度,但您可以使用 DTO 更好地管理会影响实体的任何更改。或者,您可以使用 Spring Rest Repositories 将实体返回到前端组件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时在 Angular + Java 项目中使用 DTO 和 Matpstruct 的相关文章

随机推荐