separate view, response, model