Akademi Manajemen Informatika

Hai… Selamat datang kembali di blog Sandi Dharma Blog. Pada postingan ini kita akan belajar tentang apa itu dependency injection dalam pemrogramman. Kita juga akan bahas beberapa manfaat yang Pandai kita dapatkan dengan menerapkan dependency injection pada kode program kita.

Apa Itu Dependency Injection?

Dalam rekayasa perangkat lunak, Dependency Injection (DI) adalah sebuah desain pattern dimana suatu objek menerima objek atau fungsi lain yang dibutuhkan oleh objek tersebut (ketergantungan). Dependency injection bertujuan Buat memisahkan bagian-bagian program yang menangani permasalahan yang berbeda (separation of concerns). Suatu objek dapat menggunakan fungsionalitas dari objek lain tanpa perlu mengetahui kerumitan-kerumitan apa yang terjadi di dalamnya.

Service & Client

Service adalah objek atau class yang berisi fungsi-fungsi yang dapat digunakan oleh client. Di sisi lain, client adalah objek atau class yang menggunakan fungsi-fungsi yang disediakan oleh service.

READ  #16: If Expression - Belajar Golang Dari Dasar

Sebuat service dapat berperan sebagai client Apabila menggunakan objek atau class lain sebagai dependency-nya. Begitu pun sebaliknya, client juga dapat berperan sebagai service Apabila digunakan oleh objek atau class lain.

Interface

Client Sebaiknya Kagak perlu Mengerti dan Kagak Acuh bagaimana implementasi yang dilakukan dalam sebuah service yang digunakannya. Client hanya menggunakan API yang disediakan oleh service. Sebagai analoginya adalah ketika Engkau berada di kedai kopi dan memesan secangkir espresso, Engkau cenderung Kagak perlu Mengerti apa yang dilakukan barista selama Engkau Pandai mendapatkan espresso sesuai dengan keinginan Engkau, Engkau hanya perlu menikmatinya.

Injector

Injector, atau Normal juga disebut dengan container, provider, atau ansembler adalah objek yang berfungsi Buat membangun dan menghubungkan objek-objek yang kompleks dimana objek-objek tersebut dapat berperan sebagai service, client, atau keduanya.

Manfaat Menerapkan Dependency Injection

Penerapan dependency injection dapat memberikan beberapa manfaat bagi sebuah aplikasi ataupun bagi developer yang menulis aplikasi. Sebagai Teladan, pemisahan komponen-komponen aplikasi sesuai dengan peran dan fungsinya dapat memudahkan pembuatan unit test karena objek-objek yang berfungsi sebagai dependency dapat dengan mudah digantikan dengan teknik mocking (Membikin objek Palsu). Selain itu, penerapan dependency injection dapat memudahakan proses perubahan atau scaling aplikasi. Misalnya, pada Begitu pertama dirilis, aplikasi hanya Pandai mengirimkan notifikasi melalui email. Kemudian karena permintaan user aplikasi diupgrade agar dapat mengirimkan notifikasi melalui pesan singkat selain melalui email.

READ  #32: Nil - Belajar Golang Dari Dasar

Kekurangan

Di balik manfaat-manfaat yang ditawarkan oleh konsep dependency injection, faktanya konsep ini juka Mempunyai beberapa kekurangan yang mungkin perlu jadi perhatian sebelum diterapkan. Beberapa di antaranya adalah sebagai berikut:

  • Kode agak sulit dilacak karena memisahkan perilaku dari Pembangunan objek.
  • Memerlukan usaha yang lebih Begitu awal pengembangan.
  • Kode program sangat Elastis yang biasanya akan sedikit menyulitkan IDE Buat melakukan otomatisasi.
  • Ketergantungan pada kerangka kerja.

Teladan

Berikut ini adalah Teladan dependency injection sederhana yang ditulis dalam bahasa pemrogramman PHP

php

// Service Interface
interface NotificationService
{
  // fungsi Buat mengirim notifikasi
  public function send($message): bool;
}

// Service Implementation
class BaseNotificationService implements NotificationService {
  public function send($message): bool {
    // logic mengirim notifikasi
  }
}

// Sebagai client
class OrderService
{
  private NotificationService $notificationService;

  public function __construct(NotificationService $notificationService) {
    $this->notificationService = $notificationService;
  }

  public function createOrder()
  {
    // Menggunakan notificationService Buat mengirim notifikasi
    // setelah Membikin order
    $this->notificationService->send('New order');
  }
}

// Sebagai container/Injector
class App {
  public function __construct()
  {
    // Membikin service
    $notificationService = new BaseNotificationService();

    // Inject service ke client
    $orderService = new OrderService($noficationService);

    // Menggunakan client seperti Normal
    $orderService->createOrder();
  }
}