Java DTO(data transfer object)的使用

版权声明:非商业目的可自由转载,转载请标明出处 https://blog.csdn.net/u010013573/article/details/83991410

解耦接口调用者与接口实现者

  • 在接口设计当中,如果涉及到同时返回多个关联对象,如问题Question,又包括问题选项QuestionOptions,此时一般想到的做法是使用一个Map,然后将qustion和questionOption分别作为key,然后返回,这种做法使得调用者需要查看接口实现代码,才能明确知道这个map里面放了什么东西,造成接口调用者与接口实现者紧密耦合,故可以设计一个新的DTO对象,封装这两个数据,这样的好处:
    • 既可以增加接口可读性,同时也能提高拓展性,之后又新数据,则可以直接增加一个字段。同时在接口传参方面也可以采用类似的做法。从而达到开闭原则和最小知识原则;
    • 对Java代码而言,可以以类型安全的方式去获取数据,而不需要像Map一样,需要使用一堆的强制类型转换,如:Question question = (Question)map.get(“question”);

作为适配器或者代理,用于转换或拓展已有model

  • 如TaskProductFilter是过滤器实体类,里面包括gameType1,gameType2两个字段,而所需查询的数据字段game_type则是以“gameType1 > gameType2”的字符串方式存储,所以在查询中不能直接取gameType1和gameType2,为了减少在业务逻辑代码中增加一堆处理和判断,则可以抽象出一个DTO对象TaskProductFilterDTO,并且继承TaskProductFilter,在TaskProductFilterDTO中增加gameType字段,并进行处理。同时若查询中又要增加其他实体TaskProductFilter没有的字段辅助查询,则可以在TaskProductFilterDTO中增加,而不需要对数据库实体TaskProductFilter进行任何修改,从而达到对拓展开放,对修改关闭。

猜你喜欢

转载自blog.csdn.net/u010013573/article/details/83991410