public function dispatch(Request $request)
 {
     $this->routeMap = $this->initRouteMap();
     list($module, $controller, $action, $paramName) = $this->findRoute($request->getUri(), $request->getMethod());
     $data = $request->getData();
     $controllerFullName = sprintf('src\\%s\\controller\\%s', $module, $controller);
     $controller = new $controllerFullName();
     $action = $action . self::ACTION_POSTFIX;
     if (!method_exists($controller, $action)) {
         throw new Exception(sprintf('Method %s does not exist in %s', $action, get_class($controller)));
     }
     return $controller->{$action}($request, $paramName, $data);
 }