Я много работаю с MVC (хотя у меня есть разновидность веб-приложения Java), и я часто сталкиваюсь с некоторыми ситуациями, когда кажется, что службе необходимо как-то взаимодействовать с контроллером. Но в каждом случае оказалось, что я что-то не так делал в контроллере, или интерфейс моего сервиса недостаточно гибок (то есть детализирован).
Когда служба не получает достаточно данных, это из-за того, что пользователь вводит неверные данные? Если это так, то контроллер должен выполнить проверку входных данных и отобразить соответствующее сообщение или сообщение об ошибке.
Если ожидается, что пользователь не предоставит все данные сразу, тогда контроллер должен знать, что служба не примет данные как есть. Следовательно, контроллер должен управлять беседой с пользователем через пользовательский интерфейс, а затем в конце концов передать все службе.
Или, возможно, контроллеру необходимо запрашивать службу в течение всего процесса работы мастера. В этом случае интерфейс службы, вероятно, должен быть более детальным.
Я бы выбрал вариант 1, который вы предложили. Если контроллер способен собирать все необходимые входные данные из пользовательского интерфейса и предоставлять их службе, но он не может этого сделать, то служба должна выдать исключение. Использование исключения целесообразно, поскольку вы пытаетесь передать недопустимые данные в службу. (Это не меняет того факта, что исключения должны создаваться не для управления потоком программ, а скорее для указания того, что контроллер фактически облажался при предоставлении службе некоторых недопустимых данных.)