Вопрос проверяет понимание архитектурных последствий отказа от сторонних сервисов и влияния этого решения на клиент.
Смена сторонних сервисов затрагивает не только SDK, но и архитектуру клиента. Часто меняются контракты, форматы данных и поведение API. Если зависимости не были изолированы, изменения распространяются по всему приложению. Грамотная абстракция снижает стоимость такой миграции.
Отказ от стороннего сервиса почти всегда выявляет архитектурные проблемы клиента.
При миграции:
меняются события аналитики
отличаются payload’ы
по-другому работают ошибки
Если модели жёстко связаны с SDK:
требуется массовый рефакторинг
растёт риск регрессий
Сторонние сервисы часто:
ретраят запросы
буферизуют события
работают офлайн
Собственная реализация:
требует повторить эти гарантии
часто стартует с упрощённой логики
Firebase-подобные SDK:
инициализируются рано
живут всё время работы приложения
Собственные сервисы:
требуют явного управления
могут зависеть от сессии или пользователя
Определение:Слой абстракции сервиса — это интерфейс, скрывающий конкретную реализацию аналитики, пушей или логирования.
protocol AnalyticsService {
func log(event: AnalyticsEvent)
}
Никогда не использовать SDK напрямую в UI
Работать через собственные интерфейсы
Закладывать возможность замены сервиса
Делать миграцию поэтапной
Смена сервиса — это тест архитектуры. Чем слабее связность, тем дешевле и безопаснее миграция.