Предложите инфраструктуры MVC, которые не используют базовые классы контроллера - PullRequest
2 голосов
/ 27 октября 2010

Псевдокод:

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 ]

7 голосов
/ 03 декабря 2010

Spring MVC и Grails (построены поверх пружины) поддерживают внедрение зависимостей без какого-либо наследования. Каждый контроллер - это класс, который ничего не расширяет. Вместо этого вы можете добавить в него другие компоненты (используя внедрение-зависимость). Например:

@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
}

(Хотя внедрение контроллеров в другие контроллеры не принято, вы можете внедрить любой объект)

3 голосов
/ 05 декабря 2010
2 голосов
/ 03 декабря 2010

Django решил использовать разные термины для паттерна MVC. В django-говорить «представление» это то, что большинство людей называют контроллером. представление 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)
0 голосов
/ 10 декабря 2010

Struts 2 также позволяет вам сделать это. Все действия являются простыми Java-бобами.

0 голосов
/ 10 декабря 2010

JSF & Spring MVC

Простой учебник для JSF: www.coreservlets.com / JSF-Tutorial / jsf2 / index.html # Аннотации

Базовый пример из 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 привязывает свой URL к "/ doSomething"

[извините за жирный URL, я могу опубликовать только один URL в ответе как новичок: -S]

...