MVC - 从模型重定向是错误的

Ric*_*nop 8 oop model-view-controller design-patterns

我想问一下,从模型而不是控制器重定向是否是一种好方法.

我想这样做的原因是因为从模型中单元测试重定向更容易(我只是将模拟重定向器对象传递给我的测试中的模型),而不是单元测试更难控制的控制器.它还使控制器更薄,因为我在控制器中所做的只是创建模型的实例并从请求对象传递它的参数.控制器中没有这样的if/else.

这是一种不好的做法吗?

ter*_*ško 3

控制器和模型都不应该在任何地方重定向任何内容。HTTP Location 标头是响应的形式,严格在视图的权限范围内。

模型层处理业务逻辑,它应该完全忽略表示层的存在。

基本上,它可以归结为:控制器处理输入,视图处理输出。HTTP 标头是输出的一部分。

注意:在处理 Rails 克隆时,经常会看到在“控制器”中执行重定向。这是因为他们所说的“控制器”实际上是视图和控制器职责的合并。这是选择用简单模板替换真实视图作为三元组的第三面的副作用。

  • 为什么控制器不应该进行重定向?毕竟它的目的是控制应用程序的“GUI 流程”。进行重定向似乎是控制器的固有职责。视图无法知道“下一步去哪里”的任何信息,而应该仅仅“显示”模型中的数据。 (15认同)
  • 这个答案是错误的。重定向只是告诉您需要渲染不同视图的一种形式,它属于控制器。时期。重定向的实际执行是另一回事,但它发生在您发现需要重定向之后。在 ASP.NET MVC 中,您的控制器将为您生成一个 RedirectResult,并且它在单元测试中是完全可测试的。如果OP正在使用的框架中没有类似的构造,我会感到惊讶,所以我建议搜索它。 (4认同)
  • @gabnaim,什么是“GUI 流程”?我找不到它[这里](http://martinfowler.com/eaaDev/uiArchs.html)或[这里](http://st-www.cs.illinois.edu/users/smarch/st-docs/ mvc.html),或[此处](http://books.google.lv/books/about/?id=FyWZt5DdvFkC),甚至[此处](http://c2.com/cgi/wiki?ModelViewController) 。看来您只是盲目地遵循某些框架,该框架声称凭借其名称中的“MVC”来实现 MVC。请。**查找控制员的职责是什么!**。或者您是那些将 ASP.NET MVC 框架称为“MVC”并将 IE 称为“互联网”的人之一? (2认同)