Konsep MVC pada Object Oriented Programming

Ketika anda baru mulai belajar bagaimana caranya memprogram, anda akan dihadapkan dengan banyak sekali istilah-istilah yang sering kali sulit untuk dipahami.

Mungkin ini yang menjadi alasan mendasar banyak orang berhenti belajar memprogram karna proses pembelajaran yang sangat dalam.

Contohnya saja seperti yang saya sebutkan tadi yaitu anda akan dihadapkan dengan begitu banyak sekali terminology atau istilah-istilah baru yang belum pernah anda dengar sebelumnya.

Namun ketika anda mulai menangkap dan memahami istilah-istilah tersebut, anda akan menyadari bahwa sebenarnya pemrograman itu sangat logis dan sangat mudah untuk dipahami.

Masalah yang sering terjadi ketika anda baru tahap pembelajaran alias newbie adalah kurangnya susunan kata-kata pada setiap terminology. Sehingga sulit dicerna oleh seorang pemula hingga akhirnya mereka menyerah kepada situasi yang membingungkan.

Didalam buku ini khususnya bab yang membahas seputar MVC ini akan mengajak anda untuk mengenali dan menggali lebih dalam pemrograman khususnya MVC dengan lebih jelas dan dilengkapi dengan contoh nyata. Setelah anda mulai beranjak dari materi MVC ini, anda akan dihadapkan pada kasus nyata dalam membangun framework PHP berbasis MVC. Namun anda tidak usah terlalu khawatir, yang anda perlukan saat ini hanyalah menelan dan memahami konsep MVC pada materi kali ini.

MVC

MVC (Model-View-Controller) mungkin sudah menjadi istilah yang sering sekali anda dengar dalam ruang lingkup “Software dan Web Development” tapi istilah tersebut akan sangat membingungkan ketika anda tidak bisa mencerna dengan baik apa maksud dari istilah tersebut.

MVC memegang peranan yang sangat penting didalam ekosistem RAD(Rapid Application Development). Seperti yang sudah kita ketahui bersama bahwa sudah banyak sekali PHP framework populer diluaran sana dan kebanyakan sudah siap digunakan untuk membangun aplikasi ber-skala enterprise atau skala besar. Misalnya Symfony yang digunakan oleh yahoo untuk mengembangkan Yahoo bookmark, CakePHP dikembangkan bersamaan dengan refactoring system aplikasi Mambo, Codeigniter yang digunakan oleh banyak aplikasi seperti yang dilampirkan pada laman websitenya, lalu ada Zend framework yang digunakan oleh IBM untuk mengembangkan Mangento e-commerce solution dan tentu tidak ketinggalan kita tahu ada Laravel yang mana hari ini telah menjelma menjadi framework PHP paling populer dikalangan developer didunia dengan beragam kegunaan, kemudahan serta fungsionalitas yang diusung oleh Laravel dan tentunya sangat sesuai sekali digunakan untuk mengembangkan web aplikasi ber-skala besar/enterprise.

Seperti yang sudah saya bilang pada bab pengantar, hari ini memprogram atau menulis code program dari awal sudah menjadi pekerjaan yang ketinggalan zaman. Anda bisa baca artikel saya yang berjudul “Build from scratch, terdengar menggoda tapi juga bisa menyesatkan” - http://www.medium.com.

Dan hal tersebut seharusnya anda hindari, namun untuk menjadi seorang developer yang bisa dikatakan professional anda harus mengetahui bagaimana suatu sistem itu bekerja seperti konsep dan teori semacam MVC yang berlahan-lahan kita kupas disini. Membangun framework anda sendiri dari awal bukanlah suatu keharusan kecuali jika memang anda dibayar untuk melakukannya. Diawal-awal buku, saya sudah menjelaskan kepada anda alasan-alasan logis dibalik hal tersebut. Jika anda belum mendapatkan point-pointnya, anda mungkin perlu membuka dan merefresh kembali pikiran anda dengan materi yang ada dibab pengantar sebelum melanjutkan membaca materi MVC kali ini.

Sebenarnya MVC juga merupakan “Design Pattern” yang memisahkan aspek berbeda dari setiap lini software dan web development.
Pemisahan ini menawarkan code yang bisa digunakan kembali atau didaur ulang dan juga dengan pemisahan seperti ini akan memberikan anda architecture aplikasi yang terstruktur.

Kita akan mulai membahas ruang lingkup website development. Jika anda perhatikan dengan baik didalam website development, anda bisa memecahnya menjadi 3(tiga) component terpisah.

Yang pertama, View. View merupakan component yang bertugas mempresentasikan apapun kepada pengguna. Contohnya HTML, CSS dan JavaScript.
Yang kedua, Model. Model merupakan component yang bertugas untuk berkomunikasi dengan database.
Yang ketiga, Controller. Controller merupakan suatu component yang bertugas menghubungkan View dan Model. Jadi, ketika ada seorang pengguna yang melakukan request dari View dan kemudian Controller akan mengirimkannya atau menghubungkannya ke Model.
Mengapa anda seharusnya menggunakan teknik pemisahan seperti MVC ini?

Pemisahan seperti ini mungkin akan terasa sangat berlebihan jika diaplikasikan didalam project-project kecil. Namun, akan sangat terasa manfaatnya ketika aplikasi anda sudah semakin besar.
Melakukan pemisahan kedalam 3(tiga) kategori yang berbeda memiliki sejumlah manfaat yang harus anda perhatikan:

  1. Code anda akan jauh lebih mudah untuk dilakukan pengelolaan.
  2. Jika anda tergabung dalam sebuah TIM. TIM anda bisa bekerja didalam project tersebut bahkan pada waktu yang bersamaan.
  3. Anda bisa menguliti code anda karna dengan pemisahan seperti ini dimungkinkannnya anda untuk mendaur ulang code program anda.

MVC pertama kali dicetuskan oleh Trygve ReensKaug dari Xerox PARC yang juga menjadi bagian dari sistem SmallTalk ditahun 1979. Jika anda ingin mengetahui detail dari empunya silahkan dibaca penjelasaanya secara langsung disini.

Contoh penggunaan Model-View-Controller

Bayangkan ketika kita memiliki aplikasi web khususnya SaaS(Software as a Service) yang berskala besar. Pastinya didalam aplikasi tersebut mengandung ribuan baris code. Dalam rangka menghindari duplikasi code dan agar aplikasi tersebut mudah untuk dikelola, makanya diperlukan struktur pengembangan dalam kategori ini melalui pemisahan dengan konsep MVC.

Hampir dipastikan bahwa setiap aplikasi yang coba kita bangun, kita menggunakan database untuk melakukan proses CRUD(Create, Read, Update and Delete) data pengguna. Dalam kondisi ini masuk dalam kategori Model. Model hanya bertanggung jawab untuk memasukkan atau mengeluarkan data dari database.

Dibagian paling depan, aplikasi web kita tentunya perlu menampilkan data kepada pengguna-pengguna aplikasi kita. Disinilah View mengambil peranan. View hanya bertugas atau bertanggung jawab untuk menampilkan content ke-browser.

Diantara Model dan View kita perlu sesuatu yang bisa mengambil data dari Model, kemudian memanipulasinya dan terakhir mengantarkannya kepada View. Dalam context ini disebut Controller. Controller menjadi penengah yang bertugas melakukan semua logic dan mengatur apa, dimana dan bagaimana seharusnya aplikasi bekerja.

Ringkasnya, Model ber-interaksi dengan database. View mengatur bagaimana seharusnya data ditampilkan kepada pengguna sedangkan Controller membawa data dari dan ke database dan user, memanipulasi sebagaimana mestinya dan mengatur berbagai macam fungsionalitas-fungsionalitas yang diperlukan oleh aplikasi kita.

Jika anda perhatikan dengan baik, Website terdiri dari HTML, CSS dan ditampilkan pada browser. Contoh dari pemisahan diantara HTML dan CSS disebut juga dengan pola MVC.

Masih bingung?, sekarang saya akan ajak anda untuk melihat kedalam contoh nyata. Coba anda bayangkan ketika anda mengakses suatu website. Pasti disitu anda pertama kali akan membuka browser kesayangan anda lalu mengetikkan URL website yang ingin anda tuju. Setelah website yang anda tuju terbuka atau selesai dimuat, anda akan dihadapkan oleh content-content yang mengandung HTML dan CSS. Nah, disinilah saya akan mengambil contoh untuk menjelaskan kepada anda pengertian MVC dalam contoh nyata.

Yang pertama HTML, HTML mengambil peranan sebagai Model yang bertanggung jawab dalam menangani content-content yang seharusnya ada didalam suatu aplikasi website.

Kemudian yang kedua CSS, CSS mengambil peranan sebagai View yang bertanggung jawab dalam menanggani presentation layer yang seharusnya terjadi didalam suatu aplikasi website. Misalnya mengatur warna dan font.
Sedangkan yang terakhir kita kenal sebagai browser, browser berperan sebagai Controller yang memanipulasi data melalui form atau javascript.

Contoh lainnya lagi yang mungkin sudah tidak asing lagi ditelinga anda yaitu Wordpress. Wordpress hari ini menjadi sangat popular bukan karena struktur dan kualitas codenya, tapi wordpress menjadi begitu popular karna kemudahannya dalam membuat templete baru.

Jika anda pernah membuat templete untuk wordpress. Sadar atau tidak sadar wordpress melakukan pemisahan diantara template dan code intinya. Dengan pemisahan semacam ini memungkinkan developer untuk menjaga templete yang mereka buat terpisah dari aplikasi inti. Dengan pemisahan seperti ini anda bisa dengan mudah menggonta-ganti templete anda.

Ketika anda mulai memahami apa itu MVC, Anda akan menemukan pola MVC didalam setiap aplikasi yang berbeda. Pada dasarnya MVC merupakan separation of concern. Namun, sekali anda melihat bagaimana developer lain mengimplementasikan pemisahan ini, anda akan secara cepat mengetahui bahwa tidak ada metode khusus. Anda tidak perlu memusingkan kerumitan dari pola yang ada. Cukup mengetahui dan memahami bahwa dengan pemisahan seperti ini akan membuat life cycle code program anda mudah untuk dikelola, didaur ulang/digunakan kembali, serta code anda akan memiliki struktur yang logis.

Ketika anda sudah terjerumus kedalam dunia Software Development, Anda akan menemui banyak sekali “Design Pattern” dan bagaimana cara yang benar dalam menggunakannya, seperti halnya yang dilakukan dengan pendekatan struktur MVC ini.

Ketika anda baru belajar memprogram, anda tidak perlu atau bisa mengabaikan konsep-konsep tersebut karena kebutuhan anda pada saat tahap belajar hanyalah mengerti dan memahami bagaimana suatu fungsionalitas dalam setiap bahasa pemrograman bekerja. Tetapi seiring dengan berjalannya waktu, anda pasti akan naik level menjadi software developer yang lebih professional. Dengan kenaikan level pasti anda juga dituntut untuk belajar banyak hal seperti halnya anda akan menemukan dan belajar banyak hal, misalnya mengenai konsep-konsep seperti MVC ini. Juga, alasan-alasan dibalik penggunaan konsep-konsep yang sudah teruji kedalam project anda.

Dengan menstrukturkan project aplikasi anda, Ada sejumlah manfaat yang bisa menguntungkan anda seperti halnya:

Dengan MVC, MVC akan menstrukturkan aplikasi anda.

Ketika project anda makin tumbuh membesar, anda perlu memaksakan struktur dan aturan yang sudah teruji atau jika tidak, project anda akan berantakan. Dengan menstrukturkannya, project anda akan memiliki code yang mudah untuk dimaintenance dikemudian hari. MVC merupakan recognizable structure, makanya dengan struktur dari MVC ini akan membuat aplikasi anda memiliki struktur yang jelas dan dapat dikenali dengan mudah. MVC merupakan struktur yang mudah dikenali, ketika anda melihat project orang lain anda akan segera memahami bagaimana itu bekerja. Dengan mengikuti aturan dari struktur tersebut, anda memastikan bahwa developer lain akan mudah memahami struktur aplikasi anda.

Separation of Concerns

Ketika anda membuat aplikasi yang besar, pasti anda ingin memastikan beberapa hal ada didalam aplikasi anda. Salah satu dari sekian banyak hal yang penting adalah anda bisa memisahkan aspek-aspek yang berbeda dari yang seharusnya ingin anda rubah.

Didalam dunia Software Development, banyak hal berubah dengan cepat dan anda tidak bisa mengharapkan bahwa pekerjaan yang anda selesaikan hari ini tidak memiliki masalah besok. Dengan kata lain, setiap hari membawa peluang untuk meningkatkan atau memperbaiki pekerjaan sebelumnya. Jadi mau tidak mau anda harus mulai menstrukturkan pekerjaan anda tentunya dengan cara yang tepat sehingga environment pekerjaan anda bisa mendukung setiap regenerasi yang terjadi secara berkelanjutan.

Misalnya dengan menggunakan konsep MVC ini, akan memastikan bahwa aplikasi/project yang anda bangun terstruktur dan memiliki modularitas yang jelas sehingga mudah dalam proses pengembangan yang berkelanjutan.