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 に答える