DTO转换
即使实体对象支持了动态性以表达任意形状的数据结构,和DTO之间的转换也是无法完全避免的。
Jimmer提供动态实体,可以很好地解决很大一部分DTO爆炸问题。所以,一般情况下不需要定义输出型的DTO类型来表达查询返回结果。
然而,并非所有DTO类型都可以被消灭,其中,输入型的DTO对象很难去除。
以GraphQL为例,虽然从output的角度讲,为客户端返回动态的
GraphQLObject
数据;但是,从input的角度讲,接受客户端提交的静态的GraphQLInput
数据。GraphQL协议为什么将
GraphQLInput
定义为静态类型呢?是因为API的明确性和系统的安全性是非常重要需求,请参考动态对象作为输入参数的问题。GraphQL协议面对的问题,Jimmer也同样需要面对,必须给出完整的解决方案。
作为一个综合性解决方案,Jimmer不局限于ORM本身,而是为整个项目的考虑,为解决此问题,提供了两种途径。