这方法能不能提取成一个公共的方法,这样写很蛋疼。。

2016-08-01 09:52:15 +08:00
 tomoya92
public class A {
  //是否使用缓存
  private boolean flag = true;
  public Object method(String param1, String param2) {//参数不固定
    Object o;
    if(flag) {
      B b = new B();//相当于缓存
      o = b.get("o");
      if(o == null) {
        o = C.get(param1, param2);//相当于从数据库里查数据
        b.set("o", o);//在放入缓存
      }
    } else {
      o = C.get(param1, param2);//直接查询
    }
    return o;
  }
}

大致意思就是把缓存做成可控制的,用一个 boolean 值来控制开关,程序里要做很多判断,请教有办法把这逻辑整理成一个公共的方法吗?每次调用一下公共方法传写参数即可,是否开启缓存都在公共方法里处理!

2185 次点击
所在节点    问与答
10 条回复
pH
2016-08-01 11:15:54 +08:00
把 flag 这个 property 去掉,直接作为函数参数不就可以了么?
BuilderQiu
2016-08-01 11:42:20 +08:00
一个方法用 Cache 一个方法不用,调用的时候根据需求区分不好么?
tomoya92
2016-08-01 12:44:33 +08:00
@pH 参数不定,调用的方法也不一定

@BuilderQiu 很多地方用到了缓存,都是这样的写法每个用到的都写两份,还不如在一个方法里写了
kfll
2016-08-01 12:57:42 +08:00
可以写 annotation 吧
TakWolf
2016-08-01 13:09:59 +08:00
Object c = Cache.get(new GetFromDB {

return Dat.find();

}, new GetFromRedis {

return Redis.find();

});

查询过程还是要自己写

我随便瞎想的
nigelvon
2016-08-01 13:25:52 +08:00
为啥我看了好几遍也没看懂问题
zealic
2016-08-01 14:39:54 +08:00
AOP 不就干这事的么,关键在于把两个参数合并成一个缓存 key
tomoya92
2016-08-01 15:28:12 +08:00
@kfll annotation 是个好办法

@TakWolf 让我想到了 jquery 里的 hover() 了

@zealic AOP 确实是干这事的,但不知道怎么实现。。
pH
2016-08-01 16:01:34 +08:00
@liygheart 参数不固定就用可变参数,然后把 flag 做第一个不行么
fishioon
2016-08-01 16:33:23 +08:00
为啥不把 b 和 c 封装到一起呢?,同时将 flag 作为参数传递

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/296260

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX