Thursday 15 September 2016

Contoh Penggunaan Method Chaining - Kasus Total Harga Pada Sistem Kasir


Pada Kesempatan ini saya menjelaskan bagaimana pengimplementasiannya Method Chaining pada Kasus Total Harga Pada Sistem Kasir.

Method chaining yang sering digunakan untuk mengikat / merantai method. Konsep ini kita dapat memanggil lebih dari satu method untuk satu kali operasi dengan mengolah object yang sama.

Setiap method tersebut berperan mengubah nilai property dalam object tersebut dari satu bentuk ke bentuk lainnya. 
Oleh karena itu method tersebut sering disebut mutator.

Manfaat dari Method Chaining dalam kasus ini adalah membuat kode lebih enak dibaca. perhatikan kade dibawah ini :

  1. // Inisiasi Object
  2. $data = array(
  3.     'quantity' => 3,
  4.     'discount' => 10,
  5.     'price' => 10000
  6. );
  7. // Membuat Grand Total (Tanpa Chaining Method)
  8. // panggil Class
  9. $class = new Class();
  10. $grand_total = $class->sub_total($data['quantity'], $data['price']) +$class->discount($data);
  11. echo number_format($grand_total);
  12. // Membuat Grand Total (dengan  Chaining Method)
  13. // panggil Class
  14. $total = new Class();
  15. echo number_format($total->sub_total()->discount()->grand_total());


Jika anda Menggunakan gaya tanpa menggunakan tanpa Method Chaining berarti sama halnya dengan gaya Coding Prosedural.

Kita praktekkan :

Buatlah sebuah Class bernama Total yang berfungsi memanipulasi data Array berikut :

  1. $data = array(
  2.     'quantity' => 3,
  3.     'discount' => 10,
  4.     'price' => 10000
  5. );

Pada Class tersebut tersebut terdapat 3 Method :
  1. Inisiasi : mengubah object array menjadi masing-masing property.
  2. Discount : membuat diskon dari data.
  3. Grand_total : mengambil nilai yang telah dikalkulasi keseluruhan.
Struktur kodenya seperti ini :

  1. <?php
  2. /**
  3. * Method Chaining - Kasus Total Harga Pada Sistem Kasir
  4. * Class Total.php
  5. * @author Vicky Nitinegoro
  6. */
  7. class Total
  8. {
  9.     // Property untuk simpan nilai-nilai mutasi
  10.     protected $object = array();
  11.     private $set_quantity = 1;
  12.     private $set_discount = 0;
  13.     private $set_price = 0;
  14.     private $set_sub_total;
  15.     public function __construct($object)
  16.     {
  17.         // rubah object array menjadi properti
  18.         if(count($object) > 0) :
  19.             $this->inisiasi($object);
  20.         endif;
  21.         $this->set_sub_total = $this->set_price * $this->set_quantity;
  22.     }
  23.     public function inisiasi($params = array())
  24.     {
  25.         // terima object dan ubah ke properti satu-persatu
  26.         if (count($params) > 0)
  27.         {
  28.             foreach ($params as $key => $val)
  29.             {
  30.                 if (isset($this->$key))
  31.                 {
  32.                     $this->$key = $val;
  33.                 }
  34.             }
  35.         }
  36.     }
  37.     public function discount()
  38.     {
  39.         // mengihitung discount
  40.         if($this->set_discount != null)
  41.         {
  42.             $this->object = $this->set_discount / 100 * $this->set_sub_total;
  43.         } else {
  44.             $this->object = $this->set_sub_total;
  45.         }
  46.         return $this;
  47.     }
  48.     public function grand_total()
  49.     {
  50.         // cek apakah masih berupa array apa tidak
  51.         // kalo iya tampilkan subtotal saja tanpa dikurangi discount
  52.         if(is_array($this->object))
  53.         {
  54.             return $this->set_sub_total;
  55.         } else {
  56.             return $this->object;
  57.         }
  58.     }
  59. }
  60. // Data yang akan diolah
  61. $data = array(
  62.     'set_quantity' => 3,
  63.     'set_discount' => 10, // discount 10%
  64.     'set_price' => 10000
  65. );
  66. // Panggil Class
  67. $total = new Total($data);
  68. // Tampilkan tanpa discount
  69. echo number_format($total->grand_total()); // Output : 30,000
  70. echo "<hr>";
  71. // tampilkan dengan discount
  72. echo number_format($total->discount()->grand_total()); // Output : 3,000

Saya kira dari kode tersebut sudah bisa dipahami, silahkan tambahkan method lainnya jika dirasa kurang.

Demikian Contoh Penggunaan Method Chaining sederhana. :-)

Hanya celotehan code dan berusaha untuk membagikannya kepada halayak orang yang beru mulai belajar.