将请求对象发送到Django中的模型方法是一种反模式吗?

时间:2016-09-02 08:22:46

标签: python django design-patterns

我目前正在尝试使用fat model, thin view模式,将几乎所有逻辑移动到模型方法。

在执行此操作时,我不断发现自己从视图向模型方法发送request个对象:

model_method(request)

并以下列方式使用它:

def model_method(self, request):
    user_id = request.user.id
    user_type = request.user.__class__.__name__

    ...

这是个好主意吗?或者我应该将我想要的请求对象发送到方法,而不是整个对象,如下所示:

user_id = request.user.id
user_type = request.user.__class__.__name__

model_method(user_id, user_type)

正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

@knbk作为评论发布的答案:

一旦开始传递仅用于访问一个或两个属性的请求,就将其视为God对象。当您只需要一个User实例时,您将在请求对象和您的方法之间引入不必要的紧密耦合。稍后,当您实际上没有请求对象时,可能需要使用用户对象调用此方法。在其他情况下,您可能需要请求(例如,访问会话或设置Cookie),因此传递请求是唯一有意义的解决方案