Почему слой Presentation не должен напрямую взаимодействовать с данными

«Почему слой Presentation не должен напрямую взаимодействовать с данными» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Presentation слой должен быть "глупым" и отвечать только за отображение данных и обработку пользовательских действий. Прямое взаимодействие с данными нарушает принцип единственной ответственности и усложняет тестирование.

Вместо этого следует использовать паттерн MVVM или Clean Architecture, где:

  • Presentation слой получает данные через ViewModel/Presenter
  • ViewModel/Presenter получает данные из Domain/Data слоев

Пример с MVVM:

// Плохо (нарушение слоев)
class MyActivity : AppCompatActivity() {
    fun loadData() {
        val data = Database.getData() // прямое обращение к БД
        showData(data)
    }
}

// Хорошо
class MyViewModel : ViewModel() {
    private val repo = DataRepository()

    fun loadData() = repo.getData() // данные приходят через репозиторий
}

class MyActivity : AppCompatActivity() {
    private val viewModel: MyViewModel by viewModels()

    fun loadData() {
        viewModel.loadData().observe(this) { data ->
            showData(data)
        }
    }
}