Cara Menggunakan Service Container Di Laravel

Di artikel kali ini saya akan membahas mengenai bahan advance dari framework laravel yaitu Cara Menggunakan Service Container Di Laravel, Service container adalah sebuah fitur unggulan yang di miliki oleh laravel , baiklah kita akan bahas lebih mendalam di artikel ini.



Apa itu class dependency?



Class dependency pada pemrograman yakni kondisi dimana kita membutuhkan class lain bagi merancang object dari sebuah class. Misalnya perhatikan class PaymentGateWay  dan OrderDetails berikut:



<?php

namespace AppBilling;


use IlluminateSupportStr;


class PaymentGateWay
{

private $currency;
private $discount;

public function __construct($currency)
{
$this->currency = $currency;
$this->discount = 0;
}

public function charge($amount)
{
return [
'amount' => $amount - $this->discount,
'confirmation_number' => Str::random(),
'currency' => $this->currency,
'discount' => $this->discount
];
}

public function setDiscount($amount)
{
$this->discount = $amount;
}

}


<?php

namespace AppOrders;

use AppBillingPaymentGateWay;

class OrderDetails
{

private $payment_gate_way;


public function __construct(PaymentGateWay $payment_gate_way)
{
$this->payment_gate_way = $payment_gate_way;
}


public function all()
{
$this->payment_gate_way->setDiscount(1000);

return [
'name' => 'Bayu fajar sidik',
'Address' => 'Cengkareng timur'
];
}
}


dapat kita lihat ketergantungan (dependency) antara class PaymentGateWay  dan OrderDetails dimana seandainya ingin menjalankan class OrderDetails  karenanya kita pun mesti menjalankan class PaymentGateWay  terlebih dahulu.  Jadi seandainya kita gunakan class tersebut dengan cara seperti ini karenanya akan terjadi error :



<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use AppBillingPaymentGateWay;
use AppOrdersOrderDetails;

class PayOrderController extends Controller
{
public function store(OrderDetails $order_details, PaymentGateWay $payment_gate_way)
{
return [
'order' => $order_details->all(),
'charege' => $payment_gate_way->charge(30000)
];

}
}


loh kenapa tetap error kan di controller tersebut telah di lakukan instace ? Betul harusnya setalah kita menjalankan instance di class PaymentGateWay  dan OrderDetails tak akan terjadi error.Tetapi coba teman-teman lihat baik-baik di class PaymentGateWay di bagian constructor nya :



public function __construct($currency)
{
$this->currency = $currency;
$this->discount = 0;
}


Di method constructor tersebut kita pun menjalankan set value bagi property $currency lalu bagaimana bagi melakukam set value nya ?  Ya dapat saja sih kita set ketika kita lakukan instance nya di controller nya.  Tetapi bayangkan bagaimana seandainya banyak controller yang bergantung di class tersebut ?  yupsssss heheh kita mesti menjalankan set value di segala controller yang ingin menginstace class PaymentGateWay.   Itu benar-benar tak maintainable .



Lalu bagaimana caranya agar kita lumayan 1 kali menjalankan set value atau perubahan tetapi berdampak ke segala controller yang bergantung di class PaymentGateWay ?


Jawabanya yakni serive container.



Kita akan bikin Service Container nya di file app/Providers/AppServiceProviders.php kita akan menjalankan binding dengan menggunakan singleton pattern seperti berikut ini :



<?php

namespace AppProviders;

use IlluminateSupportServiceProvider;
use AppBillingPaymentGateWay;

class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->singleton(PaymentGateWay::class, function($app){
return new PaymentGateWay('rupiah');
});
}

/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
}


nah setalh kita lakukan binding di method register() karenanya kita telah dapat menggunakan class PaymentGateWay  dan OrderDetails tanpa mengalami error.



Oke seperti itu saja teman-taman bagi artikel Cara Menggunakan Service Container Di Laravel seandainya teman-teman pahami bahwa tujuan dari fitur Service Container ini bagi mengatasi dependency class yang banyak dengan lumayan elegant dan sederhana agar code kita lebih efisien dan gampang di maintetance.



 



 




Sumber https://kursuswebsite.org

Popular posts from this blog

Perbedaan Antara Keyup dan Keydown Pada jQuery

Membuat Table Warna Berselang dengan PHP