Холостые вызовы вполне можно избежать. Делается это так называемым "Интеллектуальным контроллером", который протоколирует действия, и прежде чем изменить модель смотрит, а нужно ли ее изменять.
А событие, которое генерирует представление не является холостым, поскольку это реакция на действие пользователя.
все это должно быть реализовано именно в модели. Модель должна протоколировать, а не контроллер.