Каким я вижу аналитику?
Во-первых, я создаю механизм, который позволяет сохранять измеряемые аспекты. Я сам определяю, что нужно измерить и сохранить.
Потребуется для каждого аспекта создать свою механику сохранения. Потому что в каждом случае будет своя специфика, своя "игра". Однако, механика везде одинакова. Игра пишется на уровне дизайна Use Case.
Например, "игра" по отправке касаемо покупки товаров - это один Use Case, игра по отслеживанию жизненного пути, или скажем, "следа пользователя" - другой Use Case. Вот как это будет.
Итак, как я сделаю абстракцию? Механику. Это будет зависимость для Use Case. Они получают эту механику. Ну, судя по всему, достаточно просто сохранять Bundle. Вопрос только в законности Bundle. Хорошо ли его использовать на этом уровне? Или следует использовать другую абстракцию(возможно лежащую прямо под самим Bundle)?
Это вопрос зависимостей. UseCase будет лежать на пакетах, которые обычно классифицируют feature модулем, в папке "/analytics". Фича модуль уже имеет зависимость от модуля аналитики, и лучше бы, туда не примешивать "кучу с бандлом". Будет реализация бандла для аналитики, потом переведем их в Bundle, специально для GA, в модуле "analytics-implementation-ga".
Use Case будут покрываться тестами в "фичевых" модулях, в зависимости от "игры". Тесты можно будет писать по классике TDD.
Ну, на первое время, избавимся от модулей. Или нет? Нет. Делай сразу нормально. Вроде решили не оставлять крепости, так не оставляй. Будем, значит, делать модулюризацию сейчас