多層アプリケーション構造でデフォルトを設定するための最良の方法を考えています。具体的には、特定のワークフローでネストされた関数呼び出しのセットが必要な場合、デフォルトはすべての関数で指定されていますか、それとも最上位の関数だけで指定されて渡されますか?それとも完全に他のパターンですか?
たとえば、次の3つのレイヤーを持つWebアプリについて考えてみます。
- リソースレイヤーはHTTPリクエストとレスポンスを処理し、クライアントからHTTPパラメーターを取得します
- ビジネス層は、必要な情報を決定するために必要なビジネスロジックを実行します
- データ層はデータベースにアクセスし、要求されたデータを返します。
クライアントが単一のオブジェクトを取得したいとします。この例では、そのオブジェクトを取得しPlace
ます。場所オブジェクトには、type
市、州、町、郡などがあります。
リソース関数は次のようになります(Django HTTPオブジェクトを使用)。
def resource_get_place(request, type=None):
""" Gets a place of the specified type, or a place of any type if
type is None """
place = business_get_place(type=type)
return HttpResponse(request, {
"place" : place
}
次に、他の2つは次のようになります。
def business_get_place(type):
# Trivial in this case, used for consistency
return data_get_place(type)
def data_get_place(type):
# Get a place of specified type from the cache, or db,
# or wherever else. If type is None, get place of any type.
return place
このスタックのリソースレイヤーの「下」にある2つの関数も、デフォルトのタイプを「なし」にする必要がありますか? 私の一部は、そうすることはDRYに違反すると思います。私の別の部分は、それを行う最も予測可能でモジュール式の方法は、スタック内のすべての関数がデフォルトのタイプ「賢明に」を「なし」にすることだと思います。