Tutorial Kotlin Berguru Dependency Injection Dasar Bahasa Indonesia
Tutorial Kotlin Dependency Injection Pemula Bahasa Indonesia |
- Pernahkah kau mendengar istilah dependency injection ? Sebelum kita mencar ilmu cara menggunakannya, kita perlu tahu konsepnya. Apa itu dependency injection ?
"Dependency Inversion Principle is simply a guideline to write loosely-coupled code"
Penjelasan singkatnya dependency injection merupakan suatu pattern atau teknik untuk mengurangi ketergantungan saat mengirimkan object ke class yang membutuhkan.
Tujuan penggunaan dependency injection yakni mengurangi atau meminimalisir suatu class semoga tidak terikat dengan class lain. Berikut citra terdapat class A dan class B yang saling terikat (dependent) :
Untuk memahami lebih lanjut, kini kita coba implementasikan dengan menciptakan project sederhana. Contoh pada tutorial ini yakni menampilkan data siswa, pertama tanpa memakai dependency injection dan yang kedua memakai dependency injection manual.
dependency class |
1. Project tanpa dependency injection
Buat project gres di Android Studio dengan nama contohnya learnDI, pastikan laptop kau terkoneksi internet dan tunggu hingga proses sinkronisasi gradle selesai.
Untuk menampilkan data siswa, kita asumsikan mempunyai 2 class yakni StudentRepository, dan StudentPresenter yang akan diimplementasikan pada MainActivity. Pertama buat file gres pada package project dengan nama StudentRepository.kt :
package com.codingtive.androidtutorial class StudentRepository { fun getName(name: String): String { return "Student name is $name " } fun getAddress(address: String): String { return "from $address" } }
Class StudentRepository ini berisi method untuk mendapatkan nama dan alamat, lalu buat file gres dan beri nama StudentPresenter.kt untuk mengolah data siswa. Kodenya menyerupai berikut :
package com.codingtive.androidtutorial class StudentPresenter { private val student = StudentRepository() fun getStudent(name: String, address: String): String { return student.getName(name)+student.getAddress(address) } }
Sekarang implementasikan class StudentPresenter pada file MainActivity. Pertama buat layout sederhana, buka file activity_main.xml pada folder res > layout, ubah kodenya menjadi menyerupai berikut :
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" tools:context=".MainActivity"> <TextView android:id="@+id/student_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" android:layout_above="@id/btn_show_student" android:textSize="18sp"/> <Button android:id="@+id/btn_show_student" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="16dp" android:text="SHOW STUDENT" android:textColor="#FFF" android:background="@color/colorPrimary" android:layout_centerInParent="true"/> </RelativeLayout>Buka file MainActivity.kt dan ubah kodenya menjadi menyerupai berikut :
package com.codingtive.androidtutorial import android.support.v7.app.AppCompatActivity import android.os.Bundle import com.codingtive.androidtutorial.R import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val presenter = StudentPresenter() btn_show_student.setOnClickListener { student_text.text = presenter.getStudent("Codingtive", "Indonesia") } } }Sekarang coba jalankan maka karenanya menyerupai berikut :
Tanpa dependency injection |
Dilihat dari arahan diatas tidak ada dilema dan berjalan normal, namun sesungguhnya mempunyai kekurangan. Jika diperiksa lagi pada StudentPresenter melakukan initialize dan memakai class StudentRepository, padahal sanggup saja class StudentRepository digunakan untuk banyak class lainnya. Jika kedepannya terdapat perubahan pada class StudentRepository maka semua class yang menggunakannya juga harus menyesuaikan, hal ini akan mempersulit dan berujung pada hardcoded dependency.
Untuk menangani hal tersebut terjadi, maka diperlukannya penggunaan prinsip dependency injection, berikut kelebihan dan kekurangan memakai dependency injection :
Kelebihan :
- Menghindari hardcoded dependency dan mengurangi ketergantungan class
- Memudahkan untuk unit test dan maintenance
- Mengembangkan aplikasi lebih luas menjadi lebih mudah
Kekurangan :
- Lumayan sulit untuk dipelajari
- Jika dipakai secara berlebihan sanggup menyebabkan dilema administrasi kode
Untuk dasar dan awal belajar, kita akan memakai project sebelumnya dengan memakai dependency manual.
2. Project dengan dependency injection
Cara untuk memakai dependency manual yakni pada class StudentPresenter hanya mendapatkan object dari class StudentRepository dan menggunakannya tanpa melaksanakan initialize. Lalu bagaimana cara memakai class repository di class presenter ? Caranya yakni memakai constructor.
Kode class StudentRepository menjadi menyerupai berikut :
Kode class StudentRepository menjadi menyerupai berikut :
package com.codingtive.androidtutorial class StudentRepository( private val name: String, private val address: String) { fun getName(): String { return "Student name is $name " } fun getAddress(): String { return "from $address" } }Kode pada class StudentPresenter menjadi menyerupai berikut :
package com.codingtive.androidtutorial class StudentPresenter(private val student: StudentRepository) { fun getStudent(): String { return student.getName()+student.getAddress() } }
Lalu pada MainActivity.kt menjadi menyerupai berikut :
package com.codingtive.androidtutorial import android.support.v7.app.AppCompatActivity import android.os.Bundle import com.codingtive.androidtutorial.R import kotlinx.android.synthetic.main.activity_main.* class StudentActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_student) val name = "Codingtive" val address = "Indonesia" val student = StudentRepository(name, address) val presenter = StudentPresenter(student) btn_show_student.setOnClickListener { student_text.text = presenter.getStudent() } } }
Dengan memakai prinsip dependency injection, jikalau terdapat perubahan pada class StudentRepository maka kita hanya perlu menggantinya pada class MainActivity saja, dan kini coba jalankan maka karenanya sama.
kotlin dependency injection tutorial |
Demikian tutorial kotlin mencar ilmu dependency injection dasar untuk pemula bahasa indonesia, jikalau kau ada pertanyaan atau mau diskusi sanggup mengisi kolom komentar. Subscribe website codingtive untuk mendapatkan notifikasi update artikel dan tutorial menarik lainnya. Terima kasih
0 Response to "Tutorial Kotlin Berguru Dependency Injection Dasar Bahasa Indonesia"
Post a Comment