我正在创建一个Map Tile Server类,其函数get_tile(tilekey)
应该执行以下操作:
但是,因为我可能很快就会调用相同的图像,所以当我必须使用较慢的缓存层时,我还必须填充更快的缓存层,这就产生了重复的代码。下面是现在正在使用的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#)来实现它,所以它更像是一个设计模式问题,而不是一个特定于问题,依赖于语言的问题。
答案 0 :(得分: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]