何时在 Angular + Java 项目中使用 DTO 和 Matpstruct
When to use DTOs & Matpstruct in Angular + Java Project
好吧,我有一个大项目,我想把它做好..我什至不知道规范是什么。
问题:我有几个具有关系的实体需要一起显示在页面上。在视图中显示前 3 个事件。其中 Event 与 EventInstance、CancelationPolicy 以及多个 Pricing 相关(截止日期)和多个 EventNotes(按您的注册状态过滤)
可能的解决方案:(假设我正在使用 services/observables 获取数据,并且我拥有所有 java 和 angular 模型,等等)
A) 在 angular 中获取事件,然后获取事件的实例、相关的定价集、注释和每个实体自己的服务的取消策略。
B) 创建 Java 服务,该服务 return 一个自定义视图-DTO 将所有数据编组在一起。
C) 使用 Mapstruct 为每个实体创建一个 DTO/Mapping/etc 我可以调用事件服务 ...
..... 但是,如果我这样做,我不需要为所有这些实体做 DTOs/Mapping ......我不需要为每个拥有的实体做这个与这些对象的关系...然后这些实体服务只需要 ? return DTO.. 现在听起来太复杂了,尤其是因为我有 30 个实体..我只是害怕自己远离 Mapstruct/DTO 世界。
我错过了什么?
我正在使用 jhipster(angular 5、Spring Boot、mapstruct 等)使这一切变得半简单。
让我们整理一下...
实际上,您并不是被迫 return DTO,您可以 return 实体。但是我不鼓励这种习惯,因为你应该始终向外部世界隐藏你的数据库结构。因此,使用 DTO 始终是一个不错的选择,因为您可以选择仅映射实体中包含的一部分信息。
那么现在让我们转到 MapStruct。默认情况下,MapStruct 会将您实体中的所有内容映射到您的 DTO 中,反之亦然,而无需指定每个映射。在项目开始时,您可以选择拥有类似的实体和 DTO,然后让 MapStruct 为您完成工作,您只需说出映射的源和目标,MapStruct 通过反射构建映射器。然后,经过一些性能测试后,您可以选择只对最耗时的映射进行一些调整。
我知道 returning 实体可以加快交付速度,但您可以使用 DTO 更好地管理将影响您的实体的任何更改。或者,您可以使用 Spring Rest Repositories 来 return 实体到您的前端组件。
好吧,我有一个大项目,我想把它做好..我什至不知道规范是什么。
问题:我有几个具有关系的实体需要一起显示在页面上。在视图中显示前 3 个事件。其中 Event 与 EventInstance、CancelationPolicy 以及多个 Pricing 相关(截止日期)和多个 EventNotes(按您的注册状态过滤)
可能的解决方案:(假设我正在使用 services/observables 获取数据,并且我拥有所有 java 和 angular 模型,等等)
A) 在 angular 中获取事件,然后获取事件的实例、相关的定价集、注释和每个实体自己的服务的取消策略。
B) 创建 Java 服务,该服务 return 一个自定义视图-DTO 将所有数据编组在一起。
C) 使用 Mapstruct 为每个实体创建一个 DTO/Mapping/etc 我可以调用事件服务 ...
..... 但是,如果我这样做,我不需要为所有这些实体做 DTOs/Mapping ......我不需要为每个拥有的实体做这个与这些对象的关系...然后这些实体服务只需要 ? return DTO.. 现在听起来太复杂了,尤其是因为我有 30 个实体..我只是害怕自己远离 Mapstruct/DTO 世界。
我错过了什么?
我正在使用 jhipster(angular 5、Spring Boot、mapstruct 等)使这一切变得半简单。
让我们整理一下...
实际上,您并不是被迫 return DTO,您可以 return 实体。但是我不鼓励这种习惯,因为你应该始终向外部世界隐藏你的数据库结构。因此,使用 DTO 始终是一个不错的选择,因为您可以选择仅映射实体中包含的一部分信息。
那么现在让我们转到 MapStruct。默认情况下,MapStruct 会将您实体中的所有内容映射到您的 DTO 中,反之亦然,而无需指定每个映射。在项目开始时,您可以选择拥有类似的实体和 DTO,然后让 MapStruct 为您完成工作,您只需说出映射的源和目标,MapStruct 通过反射构建映射器。然后,经过一些性能测试后,您可以选择只对最耗时的映射进行一些调整。
我知道 returning 实体可以加快交付速度,但您可以使用 DTO 更好地管理将影响您的实体的任何更改。或者,您可以使用 Spring Rest Repositories 来 return 实体到您的前端组件。