# Dependency Injection
Dependency Injection (DI) sangat penting terutama untuk mengurangi coupling antar class.
# Studi Kasus
Contoh tanpa DI, terdapat class repository yang memerlukan komponen/class lainnya untuk berfungsi.
class ProductRepository{
final Connectivity _connectivity;
final Database _db;
final ApiClient _client;
final SharedPreferences _prefs;
ProductRepository(
this._connectivity,
this._db,
this._client,
this._prefs,
);
...
}
Misalkan untuk menginisialisasi class ProductRepository
kita memerlukan proses pemanggilan seperti berikut:
final connectivity = Connectivity();
final database = Database();
final apiClient = ApiClient();
final prefs = SharedPreferences();
final productRepositoru = ProductRepository(connectivity, database, apiClient, prefs);
...
Oke, mungkin ini masih bisa dihandle. tapi coba bayangkan misalkan class ApiClient
mempunyai ketergantungan dengan class lain.
class ApiClient {
final Dio dio;
final Http http;
final Logger logger;
ApiClient(
this.dio,
this.http,
this.logger
);
...
}
Sehingga untuk memanggil class ProductRepository
menjadi seperti ini
final connectivity = Connectivity();
final database = Database();
final dio = Dio();
final http = Http();
final logger = Logger();
final apiClient = ApiClient(dio, http, logger);
final prefs = SharedPreferences();
final productRepository = ProductRepository(connectivity, database, apiClient, prefs);
...
Kode seperti diatas tentunya dapat berjalan seperti biasa, bahkan tanpa error. Tetapi bagaimana jika kita ingin menggunakan class ProductRepository
diberbagai class? Apakah harus membuat kumpulan baris kode itu terus-menerus?.
# Flutter DI
Kita sebagai developer harus sebisa mungkin menghindari tight coupling antar komponen/class, disinilah DI WAJIB digunakan. dengan menggunakan DI kita mungkin cukup memanggil class ProductRepository
menjadi seperti berikut:
final _productRepository = getIt<ProductRepository>();
Selain kode menjadi lebih rapi, kita juga membuat class yang bersifat tidak tight coupling.
Untuk mempelajari lebih lanjut tentang DI bisa dilihat disini (opens new window) dan disini (opens new window).