Panduan Awal bagi Inyeksi Ketergantungan di AngularJS

Hai, para pemula dalam dunia pemrograman! Hari ini, kita akan memulai perjalanan menarik ke dalam dunia AngularJS dan salah satu fitur terkuatnya: Inyeksi Ketergantungan (DI). Jangan khawatir jika istilah ini terdengar sepertiongkos-ongkos – pada akhir panduan ini, Anda akan bisa menggunakannya seperti seorang ahli!

AngularJS - Dependency Injection

Apa Itu Inyeksi Ketergantungan?

Sebelum kita masuk ke detilnya, mari pahami apa itu Inyeksi Ketergantungan. Bayangkan Anda sedang memasak kue. Apakah Anda merasa enak jika seseorang memberikan Anda tepat apa yang Anda butuhkan, tepat saat Anda membutuhkannya? Itu sebenarnya apa yang Inyeksi Ketergantungan lakukan dalam pemrograman – memberikan komponen (bahan) yang Anda butuhkan agar kode Anda (kue) bisa bekerja dengan baik.

Sekarang, mari kita eksplor bagaimana AngularJS mengimplementasikan Inyeksi Ketergantungan.

Value

Sebuah Value adalah bentuk paling sederhana dari inyeksi ketergantungan. Itu seperti memberikan bahan tunggal ke fungsi pembuatan kue Anda.

var app = angular.module('myApp', []);

app.value('playerName', 'LeBron James');

app.controller('PlayerCtrl', function($scope, playerName) {
$scope.name = playerName;
});

Dalam contoh ini, kita membuat sebuah value bernama 'playerName' dan injeksinya ke dalam controller. Controller kemudian bisa menggunakan value ini seperti variable lokal.

Factory

Sebuah Factory mirip seperti campuran kue – itu adalah fungsi yang membuat dan mengembalikan sebuah objek. Itu lebih kompleks daripada Value tapi memberikan Anda fleksibilitas lebih banyak.

app.factory('playerFactory', function() {
return {
name: 'Stephen Curry',
team: 'Golden State Warriors',
getInfo: function() {
return this.name + ' plays for ' + this.team;
}
};
});

app.controller('PlayerCtrl', function($scope, playerFactory) {
$scope.playerInfo = playerFactory.getInfo();
});

Di sini, kita membuat sebuah factory yang mengembalikan sebuah objek dengan properti dan metode. Controller kemudian bisa menggunakan factory ini untuk mengakses informasi pemain.

Service

Sebuah Service mirip dengan Factory, tapi bukannya mengembalikan sebuah objek, ia mengembalikan sebuah instance dari fungsi. Bayangkan itu seperti sebuah toko kue khusus yang hanya membuat satu jenis kue.

app.service('PlayerService', function() {
this.name = 'Kevin Durant';
this.team = 'Phoenix Suns';
this.getInfo = function() {
return this.name + ' plays for ' + this.team;
};
});

app.controller('PlayerCtrl', function($scope, PlayerService) {
$scope.playerInfo = PlayerService.getInfo();
});

Perbedaan utama antara Factory dan Service adalah bagaimana mereka di-instantiasikan. Sebuah Service selalu adalah singleton – hanya ada satu instance di seluruh aplikasi Anda.

Provider

Sebuah Provider adalah bentuk inyeksi ketergantungan yang paling kompleks di AngularJS. Itu seperti memiliki sebuah toko kue yang lengkap yang bisa membuat jenis kue apa saja, dengan bahan apa saja, dan dengan cara apa saja Anda inginkan.

app.provider('playerProvider', function() {
var defaultName = 'Giannis Antetokounmpo';

return {
setName: function(name) {
defaultName = name;
},
$get: function() {
return {
getName: function() {
return defaultName;
}
};
}
};
});

app.config(function(playerProviderProvider) {
playerProviderProvider.setName('Luka Doncic');
});

app.controller('PlayerCtrl', function($scope, playerProvider) {
$scope.playerName = playerProvider.getName();
});

Sebuah Provider memungkinkan Anda mengkonfigur layanan sebelum aplikasi berjalan. Dalam contoh ini, kita mengatur nama pemain di fase konfigurasi, yang berjalan sebelum aplikasi utama.

Constant

Sebuah Constant mirip dengan Value, tapi dapat di-injeksikan ke fase konfigurasi aplikasi Anda. Itu seperti memiliki resep yang Anda ikuti tepat, tanpa perubahan, untuk jenis kue apa saja yang Anda buat.

app.constant('GAME_DURATION', 48);

app.config(function(GAME_DURATION) {
console.log('A basketball game lasts ' + GAME_DURATION + ' minutes');
});

app.controller('GameCtrl', function($scope, GAME_DURATION) {
$scope.duration = GAME_DURATION;
});

Constants berguna untuk nilai yang tidak pernah berubah sepanjang aplikasi Anda.

Contoh: Membangun Manajer Tim Bola Basket

Sekarang kita telah menelusuri semua jenis inyeksi ketergantungan, mari kita gabungkan semuanya dalam contoh yang lebih kompleks.

var app = angular.module('basketballApp', []);

// Constant
app.constant('MAX_PLAYERS', 15);

// Value
app.value('teamName', 'Angular All-Stars');

// Factory
app.factory('PlayerFactory', function() {
var players = [];
return {
addPlayer: function(name) {
players.push(name);
},
getPlayers: function() {
return players;
}
};
});

// Service
app.service('CoachService', function() {
this.name = 'Coach Angular';
this.motivate = function() {
return this.name + ' says: Let\'s win this game!';
};
});

// Provider
app.provider('gameProvider', function() {
var venue = 'Home Court';

return {
setVenue: function(v) {
venue = v;
},
$get: function() {
return {
getVenue: function() {
return venue;
}
};
}
};
});

app.config(function(gameProviderProvider) {
gameProviderProvider.setVenue('Angular Arena');
});

app.controller('TeamCtrl', function($scope, MAX_PLAYERS, teamName, PlayerFactory, CoachService, gameProvider) {
$scope.teamName = teamName;
$scope.maxPlayers = MAX_PLAYERS;
$scope.players = PlayerFactory.getPlayers();
$scope.coachMotivation = CoachService.motivate();
$scope.gameVenue = gameProvider.getVenue();

$scope.addPlayer = function(playerName) {
if ($scope.players.length < MAX_PLAYERS) {
PlayerFactory.addPlayer(playerName);
$scope.playerName = '';
} else {
alert('Team is full!');
}
};
});

Output

Ketika Anda menjalankan aplikasi ini, Anda akan memiliki manajer tim bola basket yang sepenuhnya berfungsi. Anda dapat menambahkan pemain ke tim Anda (sampai batas maksimum yang diizinkan), melihat motivasi pelatih, dan mengetahui di mana pertandingan akan dimainkan.

Berikut adalah tabel yang menggabungkan jenis inyeksi ketergantungan yang kita bahas:

Tipe Deskripsi Kasus Penggunaan
Value Inyeksi nilai sederhana Untuk menginjeksikan nilai sederhana
Factory Mengembalikan objek Untuk membuat layanan dengan logika kompleks
Service Mengembalikan instance fungsi Untuk layanan singleton
Provider Layanan konfigurasi Untuk layanan yang memerlukan konfigurasi sebelum aplikasi berjalan
Constant Nilai tak berubah, dapat di-injeksikan di konfigurasi Untuk nilai konstan di seluruh aplikasi

Ingat, kunci untuk menguasai inyeksi ketergantungan adalah latihan. Mulai dengan inyeksi sederhana dan perlahan-lahan tingkatkan ke kasus yang lebih kompleks. Sebelum Anda tahu, Anda akan bisa membuat aplikasi AngularJS modular dan mudah dipelihara seperti seorang ahli!

Selamat coding, para master masa depan AngularJS!

Credits: Image by storyset