想知道在多层应用程序结构中设置默认值的最佳方式。具体来说,如果某个工作流程需要一组嵌套的函数调用,是在所有函数上指定默认值,还是仅在顶层函数上指定并向下传递?还是完全是其他模式?
例如,考虑一个具有 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
}
那么另外两个可能是:
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
这个堆栈中资源层“下方”的两个函数是否也应该默认类型为无? 我的一部分认为这样做会违反 DRY。我的另一部分认为,最可预测和模块化的方法是堆栈中的每个函数都将默认类型“明智地”设置为 None。