【发布时间】:2016-09-02 08:22:46
【问题描述】:
我目前正在尝试使用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)
正确的方法是什么?
【问题讨论】:
-
听起来它破坏了 django 在创建方面做得很好的 MVC,但这只是我的看法。您的问题是基于意见和题外话。
-
这类问题总是取决于您的项目要求、业务模型等...但是,我们使用来避免在层之间发送不必要的信息...很多东西:安全性、性能、可维护性……
-
一旦您开始传递请求只是为了访问一个或两个属性,您将其视为有点像God object。当您只需要一个
User实例时,您在请求对象和您的方法之间引入了不必要的紧密耦合。稍后,当您实际上没有请求对象时,您可能需要使用用户对象调用此方法。在其他情况下,您可能需要请求(例如访问会话或设置 cookie),因此传递请求是唯一有意义的解决方案。 -
@knbk 谢谢!如果您可以将其发布为答案,我会接受它
标签: python django design-patterns