MVVM на Android: как реализовать?
MVVM (Model-View-ViewModel) - это архитектурный шаблон проектирования, который используется в Android-разработке для создания приложений, обеспечивающих лучшее разделение задач и повышение удобства тестирования кода.
Модель - это слой, отвечающий за получение, хранение и обработку данных, не обладающих логикой представления.
View - это слой, отвечающий за отображение данных пользователям. Этот слой реализуется с помощью различных элементов пользовательского интерфейса, таких как активности, фрагменты или пользовательские представления.
ViewModel - это слой, который служит связующим звеном между презентацией (View) и моделью (Model), а также содержит бизнес-логику. ViewModel получает данные от модели и передает их в View, а также передает пользовательские действия с View в Model.
Приведем пример кода, который демонстрирует использование шаблона MVVM:
Модель:
public class UserRepository {
private List userList;
public UserRepository() {
userList = new ArrayList<>();
userList.add(new User("John", "Doe"));
userList.add(new User("Jane", "Doe"));
}
public List getUserList() {
return userList;
}
}
View:
public class MainActivity extends AppCompatActivity {
private UserViewModel userViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
userViewModel = new ViewModelProvider(this).get(UserViewModel.class);
userViewModel.getUserList().observe(this, userList -> {
// Обработка изменений списка пользователей
});
}
}
ViewModel:
public class UserViewModel extends ViewModel {
private UserRepository userRepository;
private MutableLiveData> userList;
public UserViewModel() {
userRepository = new UserRepository();
userList = new MutableLiveData<>();
userList.setValue(userRepository.getUserList());
}
public LiveData> getUserList() {
return userList;
}
}
В этом примере UserRepository представляет модель, которая хранит список пользователей. MainActivity, в свою очередь, представляет View, привязанную к этой модели. UserViewModel - это ViewModel, который получает список пользователей от UserRepository и передает его в MainActivity через LiveData. LiveData используется для реактивного обновления пользовательского интерфейса при изменении списка пользователей.
Здесь мы видим, как MVVM разделяет задачи между разными частями приложения. Модель отвечает за получение и обработку данных, View отвечает за отображение данных, а ViewModel - за связывание модели и представления и содержит бизнес-логику. Это позволяет легко тестировать код и создавать приложения с лучшим разделением задач.