Вы не должны передавать входные данные непосредственно методу (я полагаю, что под "методом" вы подразумеваете некоторую бизнес-логику), если честно, поскольку он сочетает представление и модель.Что вы должны сделать, это сделать либо контроллер с методом проверки, либо отдельным классом проверки, который будет принимать входные данные и проверять их, используя некоторые «внешние» методы.Затем в зависимости от результата контроллер / валидатор может либо вернуть ошибку валидации, либо перенаправить ввод туда, куда вы хотите.Самым большим преимуществом этого, как я уже говорил ранее, является разделение модели и представления.Модель не должна ничего знать о представлении (что, если вы хотите изменить представление? Вам придется переписать вашу модель!).Я не совсем уверен, зачем вам дублировать код проверки в бизнес-модели?Проверка и навигация должны быть тем, что делает контроллер.По крайней мере, так работает модель MVC.
Также генерировать исключения не так уж и плохо, но они должны быть добавлены в модель и зафиксированы в контроллере.Например, у вас есть система, в которой вы хотите, чтобы пользователи имели уникальные логины, пользователь вводит логин, который уже находится в БД, контроллер вызывает метод проверки, который пытается (используя модель) вставить его в БД.Если все идет хорошо, он вставляется, и контроллер может вернуть сообщение «Вы успешно вставили значение».Но если модель выдает исключение (например, ошибка нарушения уникального ограничения или что-то в этом роде), контроллер должен просто перехватить его и вернуть «этот логин уже существует в БД».Таким образом, модель ничего не знает о представлении и может использоваться повторно, и у вас нет дублирования кода.