【问题标题】:Should the Models deal with the request / response objects?模型应该处理请求/响应对象吗?
【发布时间】:2013-08-22 03:47:00
【问题描述】:

为了让我的控制器保持纤薄,我将所有逻辑都放到了模型中。但由于我需要读取和设置 cookie,因此模型需要具有 requestresponse 对象。现在每次调用模型方法时,我必须发送这些对象作为参数。我需要记住哪种方法需要一个对象或另一个对象或两者兼而有之。它看起来像:

Model.handle_something(data, self.request, self.response)

是正确的方法还是有更简单的方法?

【问题讨论】:

  • 在我看来,你永远不应该这样做。但是,您没有提供足够的信息来展示适合您正在做的事情的替代方法。
  • 听起来你正在尝试做类似 MVC 的事情,但是你正在将你的控制器移动到你的模型中。这有点打破了 MVC 背后的理念。一般来说,您应该将 cookie 管理与模型分开。
  • @dragonx:但是 cookie 处理是逻辑的一部分。我对数据库进行了一些更改,并对 cookie 进行了一些相应的更改。我的印象是控制器是模型和视图之间的粘合剂,所以它不应该做任何逻辑。
  • MVC 中的模型不应该是类或对象。模型是一层。从 MVC 的角度来看,Cookie 是一种存储形式。这意味着它们将由某种data mapper 处理。此外,控制器并不是真正的胶水。它应该只根据用户输入(通常抽象为一些请求对象)来改变模型层和当前视图的状态。控制器不从模型层收集信息。 请不要将 MVC 与类似 Rails 的实现(这是 PAC 的混蛋)混淆!

标签: google-app-engine model-view-controller webapp2


【解决方案1】:

到目前为止,我同意 cmets 的观点,并认为这可能不是最好的方法。寻找一些方法来进一步抽象您需要对 cookie 执行的操作。可能传入一个回调函数或其他一些有助于保持所需分离的对象。

【讨论】:

  • 但是模型必须触摸 response 对象才能设置 cookie,这意味着无论如何我必须将此对象传递给模型。由于控制器首先拥有这个对象——控制器必须将它作为参数发送到模型。
  • lambda state: request.cookies['mycookie'] = state 当然会根据您的 Web 框架使用的任何语法进行调整。或者,如果涉及更多事情,您可以传入一个对象 MyStateController。底线是您要避免模型中“设置 cookie”的概念。当然,如果您要避免这个概念,您希望避免相关的对象(请求、cookie、会话......)随时发布一些代码以了解更多细节。
猜你喜欢
  • 2021-12-02
  • 1970-01-01
  • 2021-03-15
  • 2013-12-23
  • 2011-02-23
  • 1970-01-01
  • 2018-05-31
  • 2016-12-12
  • 2019-11-27
相关资源
最近更新 更多