Dasar-dasar MVC

MVC atau Model View Controller merupakan suatu metode pembangunan perangkat lunak yang memisahkan logika aplikasi menjadi beberapa bagian yang dasarkan pada fungsi suatu bagian tertentu. Penyusunan kode didalam Seme Framework akan berupa kelas, properti, dan metode dengan konsep yang sama dengan Pemrograman Berorientasi Objek.

Perhatian

Dalam penjelasan ini mungkin ada yang tidak sesuai dengan kaidah atau teori Pemrograman Berorientasi Objek (PBO).

Penjelasan ini hanyalah penjelasan singkat tentang penggunaan (Best Practice) dari Seme Framework yang menggunakan konsep Kelas dan Objek.

Dalam tutorial ini, tidak ada praktek ngoding. Hanya ada pembahasan teori bagaimana penggunaan Seme Framework supaya tidak kaget. Kadang kala, programmer bingung untuk menggunakan Seme Framework ini, beberapa kode tidak terlihat mata tapi kodenya ada dan dituliskan ketika ngoding. Maka untuk menghindari hal tersebut, kita harus belajar memahami dulu bagaimana cara menyusun kode dengan Seme Framework.

Apa itu Model?

Model merupakan bagian kode khusus yang berfungsi untuk melakukan komunikasi dari kode yang kita bangun terhadap database. Adapun isi dari model ini biasanya, untuk menarik data, menyimpan data, dan menghapus data dari database.

Apa itu View?

View merupakan kumpulan kode yang khusus digunakan untuk mengeluarkan tampilan. Biasanya pada view ini berisi HTML, JavaScript, CSS, dan sedikit PHP yang hanya digunakan untuk mengeluarkan datanya saja.

Apa itu Controller?

Controller merupakan kode yang berisi sebagai jembatan dari Model & View. Pada bagian ini biasanya berisikan kode PHP beserta logika didalamnya. Controller juga bisa diartikan sebagai identitas dari HTTP Request untuk sebuah halaman web.


Dengan pemecahan kode berdasarkan konsep MVC, diharapkan pembangunan aplikasi dapat lebih jelas dan sederhana sehingga lebih mudah untuk dikembangkan dan dikelola dari sisi kode maupun sisi alur proses.

Struktur Kelas

Kelas merupakan konsep penulisan kode dengan mengelompokan sekumpulan kode tertentu menjadi dua bagian utama, yaitu Properti dan Metode. Berikut ini adalah contoh bagan struktur kelas di Seme Framework.

[HAK_AKSES] Nama_Kelas
[HAK_AKSES] var $nama_properti;
[HAK_AKSES] function nama_metode();

Apa itu Properti pada kelas?

Properti pada kelas merupakan tempat penyimpanan nilai dari kelas tersebut. Properti kalau dalam pemrograman biasa, sering disebut dengan variabel.

Perbedaan Properti dengan Variabel

Properti adalah variabel yang tergabung dengan kelas itu sendiri. Sementara, variabel ketika didalam kelas hanya dapat digunakan dalam metode sebuah kelas.

Contoh potongan kode untuk membedakan properti dan variabel.

<?php
class Nama_Kelas_Panjang_Sekali {
  var $ini_properti;

  public function metode1(){
    $ini_variabel = 'Hello';
    $this->ini_properti = $ini_variabel;
  }

  public function metode2(){
    $this->ini_properti = $ini_variabel;
    //akan menimbulkan error,
    //karena $ini_variabel hanya ada dalam
    //ruang lingkup metode1
  }
}

//dapat ditulis juga sama dengan

public class Nama_Kelas_Panjang_Sekali {
  public $properti_ke1;
  public $properti_ke2;

  public function nama_metode(){
    //isi kode php
  }
}

Apa itu Metode pada kelas?

Metode dapat berisikan kumpulan kode atau logika yang ada pada suatu kelas.

Hak Akses pada kelas, properti, dan metode

Baik kelas, properti, ataupun metode memiliki 3 jenis hak akses yaitu:

  1. Public
  2. Private
  3. Protected

Hak akses public merupakan hak akses yang bisa diakses di manapun selama kode itu dipanggil. Pada umumnya hak akses public ini tidak dituliskan (deklarasikan) secara langsung. Jadi setiap Kelas, properti, ataupun metode yang tidak ada awalan public itu akan dianggap public.

Contoh dalam kode

<?php
class Nama_Kelas_Panjang_Sekali {
  var $properti_ke1;
  var $properti_ke2;

  public function nama_metode(){
    //isi kode php
  }
}

//dapat ditulis juga sama dengan

public class Nama_Kelas_Panjang_Sekali {
  public $properti_ke1;
  public $properti_ke2;

  public function nama_metode(){
    //isi kode php
  }
}

Hak akses private merupakan hak akses yang hanya bisa diakses didalam kelas tersebut. Hak akses ini memberikan sifat ekslusif dimana proses kode atau penyimpanan variabel didalam properti untuk tidak dapat diubah oleh pihak luar. Begitu juga dengan turunan kelasnya, baik kelas, properti, dan metode ketika memiliki hak akses private tidak dapat mengakses leluhurnya.

Contoh dalam kode:

<?php
private class Nama_Kelas_Panjang_Sekali {
  var $properti_ke1;
  private $__properti_ke2;

  public function nama_metode_public(){
    //isi kode php
  }
  private function __nama_metode_private(){
    //isi kode php
  }
}

Dalam Seme Framework, hak akses private diberi awalan (prefix) undescore dua kali, contoh $__privateVariabel.

Hak akses protected merupakan hak akses yang hanya bisa diakses didalam kelas tersebut dan turunannya. Perbedaan dengan hak akses private adalah hak akses private tidak mengizinkan siapapun mengeksekusi atau merubah properti dan metode yang ada pada kelas tersebut.

Pewarisan (Inheritance) pada Kelas

Kelas dapat diturunkan atau diwariskan supaya nilai dari properti ataupun logika yang ada pada metode tidak usah ditulis ulang. Dengan memanfaatkan pewarisan ini, penggunaan Seme Framework akan menyingkat proses pembuatan aplikasi. Karena sebagian kode yang menampung logika tertentu tinggal digunakan. Untuk penggunaan kembali kode yang sudah ada ini, disebut dengan Inheritance atau Pewarisan.

Cara atau perintah untuk menurunkan kelas

Untuk menurunkan sebuah kelas dari Seme Framework, menggunakan kode atau perintah extends. Dimana perintah extends ini akan mengacu kepada nama kelas yang menjadi orang tuanya (Parent Class).

Contoh koding pewarisan di Seme Framework.

Dalam Seme Framework ada kelas SENE_Controller , yang mana kelas ini sudah dibuat sedemikian rupa supaya dapat digunakan kembali.

Berikut ini adalah contoh kelas SENE_Controller yang sudah ada didalam Seme Framework dan akan dijadikan orang tua (parent class) oleh kelas Home. Silahkan pahami potongan sebagian kodenya.

<?php
class SENE_Controller {
  .
  .
  .
  public function load($model_file_name){
    if(file_exists(SEMEROOT.'app/model/'.$model_file_name.'.php')){
      require_once SEMEROOT.'app/model/'.$model_file_name.'.php';
    }else{
      trigger_error('could not find require_once library '.$item.'');
    }
  }
  .
  .
  .
}

Kemudian kelas SENE_Controller ini akan diturunkan menjadi kelas Home untuk menampilkan halaman utama menggunakan Seme Framework.

<?php
class Home extends SENE_Controller {
  public function index(){
    $this->load('d_blog_model');
    // ini memanggil metode load dari SENE_Controller
    // tanpa harus ngoding lagi
  }
}

Kode $this

Penulisan kode $this ketika sedang dalam kelas controller, maka itu akan mengacu ke kelas controller. Begitupun ketika dalam kelas model, maka akan mengacu kedalam kelas model tersebut. Kode $this ini bisa memiliki banyak arti tergantung dimana kode ini dituliskan. Kondisi penulisan kode $this ini disebut dengan penulisan kode kontekstual. Dimana kode $this akan bergantung terhadap posisi penulisan kode ini berada.

Dalam penjelasan saat ini kita akan fokus terhadap kelas Home dan kelas SENE_Controller yang mana sudah dijelaskan dalam potongan kode diatas. Konteks $this dalam contoh kode diatas akan mengacu pada method atau properti baik dalam kelas Home maupun kelas SENE_Controller .

Setiap perintah $this isinya akan berbeda-beda tergantung kelas utama dan kelas yang di extends-nya. Yang mebedakannya adalah akan mengacu terhadap properti apabila tidak diakhiri dengan simbol kurung (). Dan akan mengarah ke metode apabila diakhiri dengan simbol kurung ().

Untuk lebih jelasnya mari kita perhatikan dengan baik contoh penulisan kode $this dalam 2 konteks yang berbeda.

Contoh koding $this dalam konteks Controller

Berikut ini adalah contoh koding dalam konteks Controller.

<?php
class Home extends SENE_Controller {
  public function index(){
    $this->load('d_blog_model');
    // ini memanggil metode load dari SENE_Controller
    // tanpa harus ngoding lagi
  }
}

Dalam contoh konteks ini, kode $this->load mengacu pada metode yang ada pada SENE_Controller .

Contoh koding $this dalam konteks Model

Berikut ini adalah contoh koding dalam konteks Model

<?php
class B_User_Model extends SENE_Model {
  public $nama_tabel = 'b_user';

  public function tambah_data(){
    $data_baru = array('nama'=>'Sandi','Kelas'=>'2c');
    return $this->db->insert(
    $this->nama_tabel,
    $data_baru
    );
  }
}

Pada kodingan contoh Model, ada 2 perintah $this.

  1. $this yang pertama mengacu pada properti $db yang ada di dalam SENE_Model.

    Properti $db tidak ada dalam kelas B_User_Model karena properti tersebut adanya di SENE_Model.

    Kemudian, properti $db itu mengacu terhadap kelas SENE_MySQLi_Engine. Jadi, SENE_Model itu memiliki properti $db yang berisi SENE_MySQLi_Engine.

    Begitu juga kodingan $this->db->insert, isi kodenya ada di dalam SENE_MySQLi_Engine bukan di dalam kelas SENE_Model.

     

  2. Sementara pada $this kedua, pada kodingan $this->nama_tabel mengacu pada properti $nama_tabel yang ada di dalam kelas B_User_Model. Kodingnya pun bisa kita lihat, karena ada didalam kelas yang sama.

    Jadi, properti $nama_tabel itu tidak ada di dalam SENE_Model maupun SENE_MySQLi_Engine.

Pelajari selengkapnya tentang perutean di halaman URI Routing