Мы пишем приложение, используя подход Clean Architecture (примерно так).
Сейчас перед нами стоит задача: добавить аналитику. Причём, как Яндекс метрику, так и Google Analytics. Мы написали свой менеджер аналитики, вызовы публичного апи которого отправляют данные в обе системы.
Два вопроса:
Какой компонент (вью, презентер, интерактор, репозиторий) должен заниматься отправкой событий?
Как организовать отправку "сложных" сообщений? То есть таких, которые зависят сразу от нескольких параметров, например, от того, через какие экраны пользователь попал на текущий экран.
Сейчас мы внедряем класс, отправляющий события в сервисы аналитики, в презентер, и отправляем события оттуда. Один из плюсов такого подхода - мы можем отправить запрос по множеству событий - пользователь зашёл на экран (создание презентера), пользователь успешно выполнил какое-то действие (ответ от модели), или наоборот, что-то пошло не так. К тому же, мы можем протестировать наличие этих вызовов юнит тестами.
Ответ
Я вижу это так:
Аналитика относится непосредственно к поведению пользователя, поэтому вся ее работа принадлежит к слою презентации. Таким образом за трекинг событий и их цепочек ответственны презентеры.
Для трекинга сложных событий создается AnalyticsManager - где и решаются все подобные вопросы. Он также находится на уровне презентеров.
Можно вспомнить аналогичный пример: Router - сущность ответственная за навигацию. Тоже находится на уровне презентеров.
ЗЫ:
Как правильно в комментарии к другому ответу заметил @Jeevuz, бывает аналитика не только поведения пользователя, но и внутренних процессов приложения.
Тогда несомненно надо сделать AnalyticsRepository, куда будут сыпаться все события от скорости получения данных с сервера и количестве битых объектов, до пользовательских кликов.
Но за сбор самих кликов и анализ переходов по экранам будет отвечать описанный мной AnalyticsManager все также в слое презентеров.
Комментариев нет:
Отправить комментарий