Хотя я использую .net mvc, я думаю, что могут применяться те же принципы.
То, что я здесь говорю, это то, что я обычно имею:
Контроллер> Сервис> Код репозитория.
Так что в этом случае у вас будет служба аналитики, которая обрабатывает запроси может делать вызовы третьей стороне или может вызывать уровень хранилища (возможно, оба), который извлекает данные из базы данных.Но так все звонки проходят через один и тот же сервис.Плюс удаляет любые знания о том, как данные извлекаются.Фактически однажды у меня была похожая ситуация, когда мы использовали почтовый клиент и извлекали некоторые аналитические данные со своего сервера, а некоторые из нашей базы данных.Все это было скрыто в слое обслуживания, поэтому все, что было возвращено, было моделью, которую можно было использовать, однако она была сочтена подходящей.
Тогда все контроллеры, которым это необходимо, могут делиться.В представлении у меня тогда был бы помощник, который отображает эти данные.Опять же, любой желающий может вызвать помощника и передать данные модели, необходимые для этого помощника.Это позволяет вам применять принцип СУХОЙ.
Опять же, это работает для меня.YMMV