Richard_

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1.复杂排序功能

  功能介绍:大概的场景是:查询的结果包括几种不同的列表变量,需要根据不同属性列表里面的命中情况来进行排序。

  解决方案:将需要排序的内容转化为排序属性,如果属性很多可以定义一个包含所有排序属性的类,将该类组装进列表对应的类型当中。有了排序属性之后,使用thenComparing方法逐个排序即可。

 

2.toMap方法的使用

  将一个list转化成Map的时候,可以使用toMap方法,这个方法后面可以跟一个具体键值重复的冲突覆盖规则函数。

 

3.复杂查询功能

  功能介绍:一个人员信息查询的接口,这个接口的入参是人名和标识码的组合,然后根据参数包含的类型,去到对应的数据源(业务库,Mapp, wiki)中查询出对应的结果。

  实现方案:设计统一的查询接口,针对每种不同的数据源给出不同的数据实现(策略模式)。查询时,根据传入的参数获取对应的实现对象(工厂方法)。

 

4.对查询的结果(内存结果,为入到业务库)做状态标记

  功能介绍:鉴于3的需求,这里用户需要对从各种数据源中查询出来的结果做标记,然而查询的结果不一定在业务库当中(来自其它数据源)

  实现方案:将用户需要标记的数据结果转为json后生成其MD5加密的值与状态一起存入库中,这样对于查询出来的同样结果,计算MD5后与库中值比对后即可还原状态。

  注意事项:查询结果可能会包含其它属性:如排序字段,状态字段,这些由查询字段衍生出来的字段需要再加密之前排除。

       由于是加密操作,要确保单个被加密的查询结果是不会变化的,而且序列化为json字符串的方法也要是稳定的(如,转为json后,属性字段的排序不能变化)。

  优劣:劣势:1.增加查询时间成本,查询出的结果为展示状态还需要额外计算MD5以及查库比对。

     优势:无需将查询结果入库保存,MD5的值是定长的(无需使用大字段来存如原始值)。

posted on 2021-06-27 23:57  Richard_  阅读(41)  评论(0编辑  收藏  举报