Welcome to Abdul Malik Ikhsan's Blog

Software Architectural Pattern : MVC – Push vs Pull

Posted in Teknologi by samsonasik on September 22, 2011

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

Advertisements

2 Responses

Subscribe to comments with RSS.

  1. syah said, on September 23, 2011 at 3:13 am

    artikel nya bagus ,sangat bermanfaat..terima kasih gan

  2. samsonasik said, on September 23, 2011 at 8:48 am

    sama2, terima kasih juga sudah berkunjung


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: