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



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

问题:我有几个实体,需要同时在页面上显示这些实体的关系。 在视图中显示前 3 个事件。事件与事件实例取消策略、多个定价(截止日期)和多个事件说明(按您的注册状态筛选)有关系的地方

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

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

B)创建 Java 服务,该服务返回一个自定义视图 DTO,并将所有数据封送到一起。

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

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

我错过了什么?

我正在使用jhipster(angular 5,Spring Boot,mapstruct等)来使这一切变得半简单。

让我们做一些订单...

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

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

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

最新更新