Это действительно легко. Зависит от того, что каждый архитектурный вопрос написан не золотыми буквами. Но есть некоторые лучшие практики, которым нужно следовать. Вы хотите, чтобы ваши занятия были короткими, удобочитаемыми и наиболее важными для тестирования. Перемещение вашей бизнес-логики c в модель представления действительно важно, потому что тогда вы можете протестировать вашу viewModel с помощью тестов Junit без указания насмешливых компонентов c Android.
Упомянутый вами when
находится в В некотором роде бизнес-логика c, но it.itemId
, который вы видите, действительно зависит от представления и находится в области действия команды run
, переход в viewmodel в качестве параметра функции setFiltering
был бы заслуживающим внимания для немногих разработчиков
Даже расширенные модели чистой архитектуры могут иметь и они фактически имеют статус, который отображается, когда, например,
private fun handleDataState(resource: Resource<List<ProjectView>>) {
when (resource.status) {
ResourceState.SUCCESS -> {
progress.visibility = View.GONE
recycler_projects.visibility = View.VISIBLE
resource.data?.let {
adapter.projects = it.map { mapper.mapToView(it) }
adapter.notifyDataSetChanged()
}
}
ResourceState.LOADING -> {
progress.visibility = View.VISIBLE
recycler_projects.visibility = View.GONE
}
}
}
РЕДАКТИРОВАТЬ
первая функция viewModel.clearCompletedTasks()
делегирован модели представления, потому что вы собираетесь очистить кеш в (обычно) слое хранилище , другими словами, вы вызываете то, что называется прецедентом, делегируя так называемые бизнес-логики c вне представления, популярного сегодня, чтобы сделать его «настолько глупым, насколько это возможно», вы не хотите, чтобы представление очищало задачи, но хотите что нижележащий объект, представляющий задачи, очищается и только тогда отображается в виде статуса.
То же самое относится и к третьему viewModel.loadTasks(false)
, это также сценарий использования и, кроме того, вы также передаете логическое значение, которое будет введено в viewModel, или даже дальше, если вы используете чистую архитектуру. Основное правило: представление должно иметь компоненты представления, бизнес-логика c должна оставаться в модели представления. Это хорошая отправная точка, но имейте в виду, что MVVM может применяться к другим типам более сложных архитектур.