Penerapan pattern mvp di java
Hallo, selamat pagi siang sore malam temans, kali ini saya akan coba menjelaskan pattern mvp berdasarkan pamahaman saya dari membaca beberapa tutorial.
pengertian mvp dari wilkipedia yaitu
A derivation of the model–view–controller (MVC) architectural pattern, and is used mostly for building user interface
sebelumnya temans pernah mendengar tentang patter mvc ? yaitu model view controller, di pattern mvc kita menyimpan logic / fungsi dicontroller yang bisa di akses langsung oleh view, selain itu model juga dapat di akses oleh view tanpa harus melalui controller, berbeda dengan mvp (model view presenter) yaitu presenter untuk menyimpan logic/fungsi yang bisa di akses oleh view akan tetapi view tidak dapa mengakses model.
bisa dilihat pada gambar berikut ini :

masih belum ngerti dengan penjelasanya ?
Mari kita sama-sama praktekan mvp dengan contoh aplikasi sederhana, buat projek baru di android studio kasih nama Learn Mvp. setelah buat project baru buat 2 package kasih nama base dan main seperti gambar berikut :

di dalam package base buat 2 interface kasih nama View dan Presenter

isi dari file View seperti dibawah ini :
public interface View {
//2 method
void onAttachVIew();
void onDetachView();
}isi dari file Presenter seperti dibawah ini :
public interface Presenter <T extends View> {
void onAttach(T view);
void onDetach();
}setelah itu dipackage main ada 3 file seperti tampak pada gambar dibawah ini :

awalnya buat 1 interface di dalam package main, beri nama MainVIew dan interface MainVIew mengestends Interface View yang ada di package base, isi dari MainView seperti berikut ini :
public interface MainView extends View{
void showDataInDialog();
void showError();
void showSukses();
}setelah buat interface MainView, buat 1 kelas beri nama MainPresenter, kelas MainPresenter implement ke base Presenter, sehinga nanti akan diminta implement 2 method yang ada dalam Interface Presenter, isi dari MainPresenter seperti dibawah ini :
public class MainPresenter implements Presenter<MainView> {
private MainView mainView;
@Override
public void onAttach(MainView view) {
mainView = view;
}
@Override
public void onDetach() {
mainView = null;
}
//
void showData(String a, String b){
if (a.isEmpty()&&b.isEmpty()){
mainView.showError();
}else {
mainView.showSukses();
mainView.showDataInDialog();
}
}
}setelah itu di dalam kelas MainActivity sebelum kita mengisi logicnya, kita tambahkan widget di dalam layout activity_main :
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="info.blogbasbas.leranmvp.views.main.MainActivity">
<Button
android:id="@+id/btn_tekanini"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tekan ini to Show The Data"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/edt_a"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:hint="Input Text A"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.283"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.239" />
<EditText
android:id="@+id/edt_b"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:hint="Input Text B"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.261"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.304" />
</android.support.constraint.ConstraintLayout>setelah itu kita tambahkan logic pada kelas MainActivty seperti di bawah ini :
public class MainActivity extends AppCompatActivity implements MainView {
Button button;
MainPresenter mainPresenter;
String ambilDataA, ambilDataB;
EditText edtA,edtB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.btn_tekanini);
edtA = (EditText) findViewById(R.id.edt_a);
edtB = (EditText) findViewById(R.id.edt_b);
mainPresenter = new MainPresenter();
onAttachVIew();
}
@Override
public void showDataInDialog() {
ambilDataA = edtA.getText().toString();
ambilDataB = edtB.getText().toString();
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("TEST MVP");
builder.setMessage(" Hasil inputan "+ambilDataA +" dan "+ambilDataB);
builder.show();
}
@Override
public void showError() {
Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();
}
@Override
public void showSukses() {
Toast.makeText(this, "Sukses", Toast.LENGTH_SHORT).show();
}
@Override
public void onAttachVIew() {
mainPresenter.onAttach(this);
addButton();
}
private void addButton() {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mainPresenter.showData(edtA.getText().toString(),edtB.getText().toString());
}
});
}
@Override
public void onDetachView() {
mainPresenter.onDetach();
}
}Masih belum memahami juga ?
Coba Simak video tutorial berikut ini :
https://www.youtube.com/watch?v=9JjlhMgW7dE&feature=youtu.be
sebelum pindah halaman jangan lupa follow medium ini dan di clap ya artikelnya.
lebih lengkapnya download projeknya digithub :