Skip to main content

Menulis Clean Code: Prinsip Dependency Inversion Principle (DIP) Pada SOLID

Dependency Inversion Principle (DIP) adalah prinsip dimana modul tingkat tinggi tidak boleh bergantung pada modul tingkat rendah. Keduanya sebaiknya bergantung pada abstraksi, sehingga meningkatkan fleksibilitas kode.

Prinsip Dependency Inversion Principle (DIP) Pada SOLID


Java mendukung DIP melalui dependency injection, yang dapat dilakukan menggunakan Spring Framework atau manual. Dengan menggunakan antarmuka dan dependency injection, kelas-kelas dalam aplikasi Anda akan bergantung pada abstraksi, bukan pada implementasi langsung, yang memudahkan pergantian implementasi.

"kelas-kelas dalam aplikasi Anda akan bergantung pada abstraksi, bukan pada implementasi langsung"

Contoh Dependency Inversion Principle (DIP)

Misalkan kita memiliki aplikasi untuk mengirim notifikasi dengan berbagai metode, seperti email dan SMS. Pada awalnya, mungkin kita memiliki kelas NotificationService yang bergantung pada implementasi spesifik seperti EmailService dan SMSService.

Desain yang Tidak Memenuhi DIP:

public class NotificationService {
private EmailService emailService;
private SMSService smsService;

public NotificationService() {
this.emailService = new EmailService();
this.smsService = new SMSService();
}

public void sendNotification(String message) {
emailService.sendEmail(message);
smsService.sendSMS(message);
}
}

Pada desain ini, NotificationService bergantung langsung pada implementasi EmailService dan SMSService. Jika nanti kita menambahkan layanan notifikasi baru, seperti PushNotificationService, kita perlu mengubah NotificationService, yang melanggar prinsip DIP.

Solusi dengan DIP: Untuk memenuhi DIP, kita bisa membuat antarmuka Notifier yang mengabstraksi layanan notifikasi dan membuat NotificationService bergantung pada antarmuka ini.


public interface Notifier {
void send(String message);
}

public class EmailService implements Notifier {
@Override
public void send(String message) {
System.out.println("Sending email: " + message);
}
}

public class SMSService implements Notifier {
@Override
public void send(String message) {
System.out.println("Sending SMS: " + message);
}
}

public class NotificationService {
private List<Notifier> notifiers;

public NotificationService(List<Notifier> notifiers) {
this.notifiers = notifiers;
}

public void sendNotification(String message) {
for (Notifier notifier : notifiers) {
notifier.send(message);
}
}
}

Sekarang, NotificationService hanya bergantung pada Notifier, bukan implementasi spesifiknya. Kita bisa menambahkan layanan baru tanpa mengubah NotificationService.

Hubungan DIP dengan KISS

Membuat Kode Fleksibel dan Mudah Diperluas: Dengan bergantung pada abstraksi, kode menjadi lebih fleksibel dan mudah diperluas. Ini menghindari perubahan yang tidak perlu dan menjaga kode tetap sederhana sesuai dengan prinsip KISS.

Meningkatkan Reusabilitas dan Meminimalkan Dampak Perubahan: Dengan DIP, perubahan pada satu layanan tidak memengaruhi layanan lain, sehingga kode lebih mudah dipelihara dan lebih sederhana dalam hal pengelolaan perubahan.


Artikel ini terkait dengan: menulis clean code dengan prinsip solid dan kiss

Related Article:

1. Menulis clean code dengan prinsip solid dan kiss

2. Menulis Clean Code: Prinsip Single Responsibility Principle (SRP) pada SOLID

3. Menulis Clean Code Dengan Open Closed Principle 

4. Menulis Clean dengan Interface Segregation Principle

5. Menulis Clean Code: Prinsip Dependency Inversion Principle (DIP) Pada SOLID

6. Prinsip Liskov Substitution Principle (LSP) Pada SOLID



Comments

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Semalam kemarin (09 Januari 2019) tidak sengaja kami sekeluarga lewat Bandung Digital Hub saat pulang dari Fish Wow Cheeseee  yang di Jl. Lombok. Bandung Digital Hub ini sendiri berlokasi tidak jauh dari dari tempat kami makan tersebut, yaitu berlokasi di Jl. Laswi No.7, Kacapiring, Batununggal, Kota Bandung, Jawa Barat 40271. Berhubung untuk bulan Januari 2019 ini sedang tidak masuk ke kantor maka saya putuskan untuk besoknya (hari ini 09 Januari 2019) nyoba untuk bekerja remote dari Bandung Digital Hub , apalagi istri yang kebetulan follower pak Ridwan Kamil di Instagram juga Facebook dan tampaknya pernah lihat ulasan mengenai tempat ini sehingga tampak antusias supaya saya datang ketempat ini ini dan mencoba bekerja dari gedung creative hub dan coworking yang keren ini.  Tempat Parkir Masalah utama saat kita datang ke coworking space terutama yang berlokasi di Bandung (atau mungkin kota-kota lainnya) adalah lahan parkir, kadang lahan parkir ...

Numpang Kerja Remote dari Bandung Digital Valley

Satu lagi co-working place  gratisan dan keren yang cukup populer dikota Bandung, co-working place yang juga memberikan fasilitas tempat kerja (co-working place) dan fitur-fitur menarik lainnya,  co-working place keren  ini adalah Bandung Digital Valley atau yang sering disingkat BDV . C o-working place  Bandung Digital Valley ini  merupakan bagian dari Telkom , mulai aktif digunakan dari sekitar tahun 2012 lalu .  Tempat ini biasanya menjadi tempat favorit bagi para pengiat startup, freelancer, dan mahasiswa . Gedung BDV Gedung BDV Gedung BDV Co-working space Bandung Digital Valley ini sendiri berlokasi di Menara Bandung Digital Valley, Jl. Gegerkalong Hilir No.47, Sukarasa, Sukasari, Kota Bandung, Jawa Barat, detailnya bisa dilihat di Google map berikut. Pemandangan jalan setelah pintu satpam. Free Co-working Space Membership Untuk mulai menggunakan fasilitas co-working space ini secara gratis maka yang pe...

Membuat Authentikasi Berbasis Token pada Spring Boot dengan Spring Security dan JWT

Setelah beberapa kali mencari tutorial tentang otentikasi aplikasi web Spring Boot dengan menggunakan JWT yang mudah dipahami akhirnya saya menemukan artikel berbahasa Inggris tapi sangat mudah dipahami  dan diikuti, artikel tersbut berada disini , dengan judul " Spring Boot Token based Authentication with Spring Security & JWT ". Untuk memudahkan orang-orang yang terbiasa membaca artikel dalam bahasa indonesia (termasuk saya sendiri), artikel ini saya buat dan susun ulang (artikel aslinya tidak tertulis dengan runtut dan dapat membuat pemula bingung dengan berbagai error yang muncul) supaya lebih mudah untuk diikuti dan dapat di gunakan bersama. Applikasi yang akan kita buat adalah aplikasi web yang setiap endpoint-nya hanya bisa di akses oleh role tertentu. 1. Tools Yang Diperlukan IntelliJ Idea text editor. Spring Assistant Plugin. Postman. PostgreSQL + DBeaver. Min Java 8 Spring Boot 2.1.8 (dengan Spring Security, Spring Web, Spring Data JPA). jjwt 0.9.1. Maven 3.6.1....