建议不使用控制器基类的MVC框架

时间:2010-10-27 07:36:31

标签: model-view-controller design-patterns language-agnostic web-applications

的伪代码:

class SomeController {
  def myAction() {
    // controler is an property passed via ctor
    controller.redirect(toWhereever)
  }
}

// another variant
class AnotherController {
  def myAction(controller) {
    // controler is an method argument
    controller.redirect(toWhereever)
  }
}

有什么建议吗?

编辑:因为这个问题有点干,你可以尝试用一些框架经验来提高你的答案,你认为更好采用这种方法

5 个答案:

答案 0 :(得分:7)

Spring MVCGrails(建立在spring之上)支持依赖注入,无任何继承。每个控制器都是一个不扩展任何东西的类。相反,您可以将其他组件注入其中(使用依赖注入)。例如:

@Controller
@RequestMapping("/user")
public class UserController {

     @Inject
     private UserService service;

     @RequestMapping("/register")
     public String register(User user) {..}

}

@Controller
@RequestMapping("/orders")
public class OrderController {
     @Inject
     private UserController userController
}

(虽然将控制器注入其他控制器并不常见,但可以注入任何对象)

答案 1 :(得分:3)

答案 2 :(得分:2)

Django决定为MVC模式使用不同的术语。在django-speak中,“view”是大多数人称之为控制器的东西。 django视图只是一个获取请求实例并返回响应实例的函数。大致看起来像这样:

from django.http import HttpResponse, Http404
import datetime

def current_datetime(request):
    if request.method != 'GET':
        raise Http404
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

答案 3 :(得分:0)

JSF&amp; Spring MVC

JSF的简单教程: www.coreservlets.com/JSF-Tutorial/jsf2/index.html#Annotations

SpringSource的一个基本示例: http://src.springframework.org/svn/spring-samples/mvc-basic/trunk

问:为何选择JSF

A: 您可以在SimpleController#doSomething

执行操作
@ManagedBean 
public class SimpleController {  

  public String doSomething() {
    ...
  }

}

SimpleController不扩展任何控制器,@ ManagedBean有助于使它看起来像一个控制器。

问:为什么选择Spring MVC

A: 您可以在“.... / doSomething”

中执行操作
@Controller
public class SimpleController {  

      @RequestMapping("/doSomething")
  public String doSomething() {
    ...
  }

}

SimpleController不扩展任何控制器。

  • @Controller有助于使类成为控制器
  • @RequestMapping将其网址绑定到“/ doSomething”

[抱歉粗体网址,我只能在新手答案中发布最多一个网址:-S]

答案 4 :(得分:0)

Struts 2也允许你这样做。所有操作都是简单的java bean。