何时使用DTO& Angular + Java Project中的Matpstruct

时间:2018-04-19 06:13:44

标签: java angular jhipster dto mapstruct

好的,我有一个大项目,我想做得对..我甚至没有什么规范。

问题:我有几个实体需要在页面上一起显示关系。显示视图中的前3个事件。 事件 EventInstance CancelationPolicy 以及多个定价(截止日期)和多个<的关系< strong> EventNotes (按您的注册状态过滤)

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

A)在角度获取事件中,然后获取事件的实例,每个实体自己的服务的相关Pricings,Notes和CancelationPolicy集。

B)创建Java服务,返回一个自定义视图-DTO,并将所有数据组合在一起。

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

.....但是,如果我这样做,我不需要为所有这些实体做DTO /映射......我不需要为每个与这些实体有关系的实体做这个对象...然后这些实体服务只需要返回DTO ...现在这一切听起来都太复杂了,特别是因为我有30个实体...而且我只是害怕自己远离Mapstruct / DTO世界。

我错过了什么?

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

1 个答案:

答案 0 :(得分:2)

让我们点一点......

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

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

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