Я не думаю, что контроллер должен иметь дело с модельными объектами.
Я склонен думать, что контроллер действительно является частью уровня пользовательского интерфейса. Я предпочитаю внедрять сервисный слой между контроллером и остальной частью приложения. Веб-уровень принимает HTTP-запросы, отменяет маршализацию параметров из объектов запроса в объекты, с которыми может иметь дело интерфейс службы, и направляет ответ для отправки обратно. Вся работа с транзакциями, единицами работы, а также работа с объектами модели и постоянства выполняется службой.
Этот подход более ориентирован на обслуживание. Он отделяет сервис от пользовательского интерфейса, оставляя открытой возможность того, что несколько клиентов могут повторно использовать один и тот же сервис. Это делает слой, который маршалы запрашивают у сервиса, «тонким», поэтому легко переключать SOAP-сервисы на REST, EJB или CORBA, или как там будет.