Software Architectural Pattern : MVC – Push vs Pull
MVC adalah kependekan dari Model View Controller, adalah pola arsitektur software yang membagi aplikasi menjadi 3 bagian, yaitu Model, View, dan Controller. Banyak developer menggunakan arsitektur ini karena menjadikan kode program lebih terorganisir sehingga memudahkan dalam pengembangan, maintenance, maupun bug fix. Masing-masing bagian mempunyai tugas dan tanggung jawab yang harus diemban.
Tugas dan tanggung Jawab Tiap Bagian itu yaitu :
- Model mempunyai tanggung jawab terhadap Data Access Logic dan Business Logic ( terlepas mereka dipisah atau dicampur dalam satu tempat ).
- View adalah output yang diterima oleh client ( boleh ada logic di sisi View, tapi logic mengelola view, bukan logic mengelola data ).
- Controller bertugas memanage request,memanggil model jika memang diperlukan, dan mempersiapkan response ( sebagai ‘lampu’ lalu lintas antara Model dan View ). Pada beberapa Framework, biasanya request tidak langsung tertuju kepada Controller, tapi Front Controller yang nantinya mendelegasikannya ke Controller jika request itu sesuai dengan peraturan ( dan perundang-undangan yang berlaku — halah :p ), jika tidak, maka Front Controller akan melempar ke dalam Exception.
Korelasi ketiga bagian di atas dapat digambarkan sebagai berikut :

Lalu, apa yang dimaksud dengan Push dan Pull MVC ? Pull atau Push adalah tentang data, bukan tentang Relasi antara View dan Model. Kebanyakan MVC Framework menggunakan Push-based arsitektur. Framework-framework tersebut menggunakan action ( dalam 1 controller bisa mempunyai banyak action ) untuk menghandle proses, memanggil data yang telah didapatkan dari Model yang telah diinstansiasi, untuk kemudian mem-”push” data ke dalam layer View untuk dapat menampilkan hasil yang dibutuhkan. MVC Push biasa disebut juga Passive View.
Contoh kode program MVC Push ( contoh pada PHP ~ penggunaan Zend Framework ) :
class SomethingController extends Zend_Controller_Action
{
protected $artic ;
//initialize
public function init()
{
//create model instance
$this->artic = new Model_Articles();
}
function dosomethingAction()
{
//get the data from the model
$this->view->data = $this->artic->getDataArticle(5);
//render view
$this->view->render('view.phtml');
}
}
Lain halnya dengan Pull-Based, di mana View bertanggung jawab memanggil model ketika membutuhkan data yang dibutuhkan secara langsung, sering juga disebut sebagai Model View Presenter.
Contoh kode program MVC Pull-Based ( contoh pada JSP ~ penggunaan useBean ) :
<!-- layer View -->
<jsp:useBean id="artic" class=”models.Articles”/>
<%
artic.getDataArticle(5);
out.print(artic.getTitle(0)+" <br />"+artic.getContent(0));
%>
<!-- end layer view -->
Klaim bahwa MVC Push-Based itu lebih baik karena digunakan mayoritas Framework tentu tidak bisa dibenarkan. Hanya saja, penggunaan MVC Push-Based dapat meminimalisir kompleksitas dari sisi View yang sejati-nya sebagai output. Demikian, semoga bermanfaat.
Gambar :
http://dotnetslackers.com/Community/blogs/xun/mvc.jpg
http://hectorcorrea.com/images/model2.jpg
Referensi :
http://www.guyrutenberg.com/2008/04/26/pull-vs-push-mvc-architecture/
http://symfony.com/doc/2.0/book/from_flat_php_to_symfony2.html
http://www.peej.co.uk/articles/rmr-architecture.html
http://framework.zend.com/manual/en/learning.quickstart.intro.html
http://molecularsciences.org/zend/mvc_model_view_controller
http://en.wikipedia.org/wiki/Web_application_framework#Push-based_vs._Pull-based
http://www.slideshare.net/pcdinh/how-to-learn-to-build-your-own-php-framework-presentation
http://www.theserverside.com/discussions/thread.tss?thread_id=22143
artikel nya bagus ,sangat bermanfaat..terima kasih gan
sama2, terima kasih juga sudah berkunjung