Persiapan Wawancara iOS 6 — Injeksi Ketergantungan

May 04 2023
Pertanyaan Wawancara Pembalikan kontrol adalah pola desain perangkat lunak yang berfokus pada transfer kontrol dari pengembang ke kerangka kerja. Framework kemudian bertanggung jawab untuk membuat dan mengelola instance objek, sedangkan developer bertanggung jawab untuk menyediakan konfigurasi khusus aplikasi.

Pertanyaan Wawancara

  1. Apa itu injeksi ketergantungan, dan mengapa itu berguna?
  2. Bisakah Anda memberikan contoh bagaimana injeksi ketergantungan digunakan di iOS?
  3. Apa saja jenis injeksi ketergantungan (injeksi konstruktor, injeksi penyetel, dll.), dan kapan masing-masing jenis harus digunakan?
  4. Bagaimana injeksi ketergantungan dapat digunakan untuk meningkatkan pengujian aplikasi iOS?
  5. Bisakah Anda mendiskusikan beberapa tantangan atau jebakan umum yang muncul saat menggunakan injeksi ketergantungan dalam pengembangan iOS, dan bagaimana cara menghindarinya?
  6. Apa saja kerangka kerja injeksi ketergantungan iOS yang populer, dan apa saja fitur dan keunggulan utama mereka?
  7. Bisakah Anda mendiskusikan beberapa praktik terbaik untuk menggunakan injeksi ketergantungan dalam pengembangan iOS?

Pembalikan kontrol adalah pola desain perangkat lunak yang berfokus pada transfer kontrol dari pengembang ke kerangka kerja. Framework kemudian bertanggung jawab untuk membuat dan mengelola instance objek, sedangkan developer bertanggung jawab untuk menyediakan konfigurasi khusus aplikasi.

Ini adalah pola yang memungkinkan Anda membalikkan aliran kontrol. Untuk mencapai ini, Anda memindahkan semua tanggung jawab kelas, kecuali yang utama di luar, menjadikannya dependensinya. Jadi objek Anda tidak tahu cara membuatnya. Ini membuat kode dapat diuji dan dipelihara dengan menghilangkan hubungan erat antar kelas.

Injeksi Ketergantungan

Injeksi Ketergantungan adalah salah satu dari beberapa pola yang membantu menerapkan prinsip Pembalikan Kontrol. Anda dapat menerapkan DI dalam beberapa cara

Injeksi Konstruktor

Dalam Injeksi Konstruktor, kami melewatkan semua dependensi melalui konstruktor sebagai parameter.

protocol EngineProtocol {
  func start()
  func stop()
}

protocol TransmissionProtocol {
  func changeGear(gear: Gear)
}

final class Car {
  private let engine: EngineProtocol
  private let transmission: TransmissionProtocol

  init(engine: EngineProtocol, transmission: TransmissionProtocol) {
    self.engine = engine
    self.transmission = transmission
  }
}

final class Car {
  private var engine: EngineProtocol?
  private var transmission: TransmissionProtocol?

  func setEngine(engine: EngineProtocol) {
    self.engine = engine
  }

  func setTransmission(transmission: TransmissionProtocol) {
    self.transmission = transmission
  }
}

Gagasan utamanya adalah bahwa sepotong kode yang memerlukan beberapa dependensi tidak akan membuatnya sendiri, melainkan kontrol untuk menyediakan dependensi ini ditangguhkan ke beberapa abstraksi yang lebih tinggi.

Manfaat utama dari Pembalikan Kontrol adalah itu

  • DI membantu meningkatkan modularitas kode Anda, lebih mudah dipahami dan dipelihara
  • Mudah menyuntikkan dependensi tiruan atau palsu selama pengujian
  • Fleksibilitas dan ekstensibilitas aplikasi Anda, dengan memungkinkan Anda mengganti atau menukar dependensi yang digunakan oleh komponen Anda dengan mudah.