1

我正在创建一个 Map Tile Server 类,它的函数get_tile(tilekey)应该执行以下操作:

  1. 尝试从内存字典中检索图像(更快);
  2. 如果不存在,请尝试从磁盘检索图像;
  3. 如果不存在,请尝试从互联网下载图像;

但是,由于我可能很快就会调用同一个图像,所以当我必须使用较慢的缓存层时,我还必须填充较快的缓存层,这会产生重复的代码。下面是现在工作的 Python 语法风格的伪代码:

## WARNING: this is Pseudo-Code!!

def get_tile(tilekey):
    if tilekey in tiles.keys():
        tileimage = tiles[tilekey]
    elif file.exists (tilekey + ".jpg"):
        tiles[tilekey] = open_image_from_disk(tilekey + ".jpg")
        tileimage = tiles[tilekey]
    else:
        download_image_to_disk(urltemplate + tilekey + ".jpg")
        tiles[tilekey] = open_image_from_disk(tilekey + ".jpg")
        tileimage = tiles[tilekey]
    return tileimage

我有这种“尝试做f1;如果不是,做f2,f1;如果不是,做f3,f2,f1”,如果这更深,那么重复代码的数量会成几何级数增长。我的印象是一些技巧的巧妙组合,如try/except/finally递归/委托,或其他一些巧妙的控制流结构,可能会使事情变得更干净。

最后一点,我计划用一种以上的语言(至少 Python 和 C#)来实现它,所以它更像是一个设计模式问题,而不是一个特定于问题的、依赖于语言的问题。

4

1 回答 1

1

这个怎么样:

## WARNING: this is Pseudo-Code!!

def get_tile(tilekey):
  if !tilekey in tiles.keys():        
    if !file.exists (tilekey + ".jpg"):
      download_image_to_disk(urltemplate + tilekey + ".jpg")

    tiles[tilekey] = open_image_from_disk(tilekey + ".jpg")

  return tiles[tilekey]
于 2013-06-01T19:26:20.553 回答