MVVM pada Android: Panduan Lengkap dengan Contoh Implementasi

Apa Itu MVVM?

MVVM adalah singkatan dari Model-View-ViewModel, sebuah pola arsitektur yang banyak digunakan dalam pengembangan aplikasi Android modern. Pola ini bertujuan untuk memisahkan logika bisnis dari antarmuka pengguna (UI) agar aplikasi lebih mudah dikembangkan, diuji, dan dipelihara.

Komponen MVVM

  1. Model: Menangani pengambilan data dan logika bisnis.
  2. View: Menampilkan data ke pengguna (biasanya berupa Activity atau Fragment).
  3. ViewModel: Mengelola data dan status UI, serta menjembatani View dan Model.

Keuntungan Menggunakan MVVM

  • Struktur kode lebih bersih dan modular.
  • Mempermudah unit testing dan UI testing.
  • Meningkatkan pemisahan tanggung jawab antara UI dan logic.
  • Integrasi mudah dengan komponen arsitektur Android seperti LiveData dan ViewModel.

Contoh Implementasi MVVM pada Android

1. Tambahkan Dependensi

dependencies {
implementation 'androidx.lifecycle:lifecycle-livedata:2.6.2'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.6.2'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
}

2. Buat Kelas Model

public class User {
private String name;
private String email;

public User(String name, String email) {
this.name = name;
this.email = email;
}

public String getName() { return name; }
public String getEmail() { return email; }
}

3. Buat ViewModel

public class UserViewModel extends ViewModel {

private final MutableLiveData<User> userLiveData = new MutableLiveData<>();

public void setUser(String name, String email) {
userLiveData.setValue(new User(name, email));
}

public LiveData<User> getUser() {
return userLiveData;
}
}

4. Buat Activity sebagai View

public class MainActivity extends AppCompatActivity {

private ActivityMainBinding binding;
private UserViewModel userViewModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());

userViewModel = new ViewModelProvider(this).get(UserViewModel.class);

userViewModel.getUser().observe(this, user -> {
if (user != null) {
binding.textName.setText(user.getName());
binding.textEmail.setText(user.getEmail());
}
});

binding.btnLoad.setOnClickListener(v -> {
userViewModel.setUser("John Doe", "[email protected]");
});
}
}

5. Buat Layout UI

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">

<TextView
android:id="@+id/textName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Nama"
android:textSize="18sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>

<TextView
android:id="@+id/textEmail"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Email"
android:textSize="18sp"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@id/textName"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>

<Button
android:id="@+id/btnLoad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Load Data"
android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@id/textEmail"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

Kesimpulan

Penerapan pola MVVM pada pengembangan Android membantu pengembang untuk membuat aplikasi yang lebih bersih, terstruktur, dan mudah dikembangkan dalam jangka panjang. Dengan memanfaatkan ViewModel dan LiveData, interaksi data dan UI menjadi lebih efisien dan reaktif.