我正在创建一个 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#)来实现它,所以它更像是一个设计模式问题,而不是一个特定于问题的、依赖于语言的问题。