Sobes.tech
Назад к вопросам
Junior — Middle
67

Объясните механизм работы делегатов ViewModel и как они взаимодействуют с остальной частью архитектуры приложения.

Компании, где спрашивали
EDJE

Ответ от нейросети

sobes.tech AI

Делегаты ViewModel — это интерфейсы или объекты, через которые ViewModel передаёт события или команды во View (Activity/Fragment) без прямой зависимости.

Механизм работы:

  • ViewModel содержит логику и состояние UI.
  • Для взаимодействия с View она использует делегаты — интерфейсы с методами обратного вызова.
  • View реализует эти интерфейсы и передаёт свою реализацию в ViewModel.
  • Когда в ViewModel происходит событие (например, навигация или отображение сообщения), она вызывает метод делегата.

Это помогает разделить ответственность и сделать архитектуру более чистой, так как ViewModel не зависит напрямую от конкретной реализации View.

Пример:

interface ViewDelegate {
    fun showError(message: String)
    fun navigateToDetails(id: Int)
}

class MyViewModel : ViewModel() {
    var delegate: ViewDelegate? = null

    fun onButtonClicked() {
        // Некоторая логика
        if (error) {
            delegate?.showError("Ошибка загрузки")
        } else {
            delegate?.navigateToDetails(42)
        }
    }
}

// В Activity или Fragment
class MyActivity : AppCompatActivity(), ViewDelegate {
    private val viewModel = MyViewModel()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        viewModel.delegate = this
    }

    override fun showError(message: String) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    }

    override fun navigateToDetails(id: Int) {
        // Навигация
    }
}