Context — один из самых перегруженных классов в Android. Через него можно делать почти всё: запускать Activity, получать ресурсы, работать с файлами и системой.
Это удобство имеет цену — с точки зрения архитектуры это почти идеальный пример God Object.
Что такое Context
Context
├── Application
├── Activity
├── Service
Разные реализации ведут себя по-разному — и это уже тревожный сигнал.
S — Single Responsibility
- ресурсы
- файлы
- навигация
- сервисы
👉 Один класс = десятки обязанностей
Нарушение SRP
O — Open/Closed
Context нельзя расширить.
👉 Только использовать как есть
Нарушение OCP
L — Liskov
Application≠Activity
👉 Подмена ломает поведение
Нарушение LSP
I — Interface Segregation
Огромный API:
context.getSystemService(...)
context.resources
context.startActivity(...)
Нарушение ISP
D — Dependency Inversion
class Repo(val context: Context)
👉 зависимость от Android SDK
Нарушение DIP
Что делать
- не прокидывать Context глубоко
- использовать abstraction
- вытаскивать только нужные зависимости
interface ResourceProvider {
fun getString(id: Int): String
}