Android Context и SOLID | Android Booster

Android Context с точки зрения SOLID

Почему android.content.Context — это God Object и главный архитектурный компромисс Android

Context — один из самых перегруженных классов в Android. Через него можно делать почти всё: запускать Activity, получать ресурсы, работать с файлами и системой.

Это удобство имеет цену — с точки зрения архитектуры это почти идеальный пример God Object.


Что такое Context


Context
├── Application
├── Activity
├── Service
      

Разные реализации ведут себя по-разному — и это уже тревожный сигнал.


S — Single Responsibility

  • ресурсы
  • файлы
  • навигация
  • сервисы

👉 Один класс = десятки обязанностей

Нарушение SRP


O — Open/Closed

Context нельзя расширить.

👉 Только использовать как есть

Нарушение OCP


L — Liskov

  • ApplicationActivity

👉 Подмена ломает поведение

Нарушение 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
}
      

Хочешь прокачать архитектуру Android?

Подписывайся на Android Booster — разбираем сложные темы простым языком

Подписаться