提问人:Clay Wardell 提问时间:2/2/2013 更新时间:2/4/2013 访问量:255
多层架构中的默认函数值
Default function values in multi-layer architecture
问:
想知道在多层应用程序结构中设置默认值的最佳方法。具体来说,如果某个工作流需要一组嵌套的函数调用,则是在所有函数上指定默认值,还是仅在顶级函数上指定并向下传递?还是完全是其他模式?
例如,考虑一个具有 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。我的另一部分人认为,最可预测和模块化的方法是将堆栈中的每个函数默认类型“明智地”设置为“无”。
答:
2赞
Borys
2/4/2013
#1
我实际上会在需要默认值而不是最高级别的最低级别进行违约。
从必要性的角度来看,就资源层而言,“类型”是可选的。同样的事情也适用于你的业务层——那里没有需要类型值的逻辑。直到您深入到数据层,才需要默认值并具有任何含义。
每一层中的函数都需要能够工作,无论从“上面”调用它是什么。因此,如果您的数据层需要某种“type”值(并且有一个默认值,无论谁调用它都是有意义的),那么将默认值放在数据层中。
如果你想保持一致,那么在更高的层中指定默认值也没有错。也许,如果您的某些业务层函数具有需要传递给数据层的任何内容的值的逻辑,则可以为该层中的所有函数设置默认值。但是,我真的认为没有必要。
关键是默认值会转到实际需要的地方。
评论