По первому вопросу, желательно отделять контроллеры отвечающие за view и json. Т.е создаются 2 контролёра. Один возвращает view другой json.
По вопросу модели,
здесь описан вариант реализации.
А вообще если смотреть на Java для сравнения, там есть паттерн DTO который упрощает жизнь