Проблема с контроллером приложения (Application Controller)

35 views
Skip to first unread message

Николай Мельков

unread,
May 5, 2016, 3:13:00 PM5/5/16
to dotnetconf
Доброго времени суток.

Пытаюсь реализовать шаблон Контроллер приложения (Application Controller) по книге Мартин Фаулер "Архитектура корпоративных программных приложений"

Имеются следующие классы
public class ApplicationController {
 
public ApplicationController() {
    addResponse
("/start", Status.MAIN_MENU, StartCommand.class, "StartPage");
    addResponse
("/cancel", Status.STARTED, StopCommand.class, "StopPage");
 
}

 
Command getDomainCommand(String commandString, Map params) throws ApplicationException {
   
Response response = getResponse(commandString, getStatus(params));
   
return response.getDomainCommand();
 
}

 
String getView(String commandString, Map params) {
   
Response response = getResponse(commandString, getStatus(params));    
   
return response.getViewUrl();
 
}

 
private Status getStatus(Map params) {
   
Integer id = (Integer) params.get("sessionID");
   
Session session = Session.find(id);
   
return session.getStatus();
 
}
}

Контроллер приложения описывает конечный автомат, исходя из которого выбирается команда и представление

Проблема возникает в следующем.

public class FrontServlet...
 
public void service(HttpServletRequest request, HttpServletResponse response) throws Exception, ApplicationException {
   
ApplicationController appController = getApplicationController(request);
   
String commandString = getCommandString(request);
   
Command comm = appController.getDomainCommand(commandString, getParameters(request));
    comm
.init(request);
    comm
.execute();

   
String view = appController.getView(commandString, getParameters(request));
    forward
(view, request, response);
 
}

Логика метода service крайне проста: определяем контроллер приложения, соответствующий заданному запросу; спрашиваем у контроллера, какую команду домена следует применить; выполняем указанную команду; спрашиваем у контроллера, какое представление следует отобразить; передаем управление указанному представлению.


Сервис запрашивает Команду и выполняет её (внутри Команды я изменяю State... вроде логично). Но getView() не может получить корректное представление. 
Где необходимо выполнять вызов смены состояния конечного автомата? Или ошибка в другом месте?
Reply all
Reply to author
Forward
0 new messages