Minggu, 27 November 2011

View Helper " Desain Pattern "

Masalah
Komponen-komponen View (biasanya dalam bentuk halaman JSP)umumnya memiliki kebutuhan akan data untuk presentasinya. Bagaimanapun, penyimpanan akses data logic atau business logic lainnya di dalam sebuah komponen presentasi mengakibatkan kode menjadi sulit di-maintain dan sedikit sulit untuk dirubah. Ini dikarenakan setiap perubahan dalam pengolahan data akan mengharuskan perubahan-perubahan di dalam layer presentasi begitu juga di layer business. Itu berpotensi lemah dalam penggunaan ulang sebuah kode, karena pada dasarnya satu-satunya cara untuk menggunakan kembali logic di dalam layer presentasi akan menyalinnya ke dalam komponen lain, dengan demikian meningkatkan jumlah komponen yang akan dirubah jika business logicnya dimodifikasi.

Juga, meletakkan business logic di dalam komponen presentasi membuatnya mustahil untuk memiliki sebuah pemisahan tugas yang jelas antara pengembang software dan Designer web.

Solusi
Untuk menghapus pencampuran business logic dari presentasi, Kita meletakkan logic dalam class "helper" yang terpisah dimana bisa didapat kembali atau di-instansiasi oleh komponen presentasi.
Class ini dapat berupa JavaBean atau class tag custom.

View Helpers memisahkan detail dari pembacaan data
Class helper dapat memisahkan detail bagaimana data yang diperlukan didapat kembali dari penyimpanan persistenst atau dari manapun dalam aplikasi. Layer presentasi cukup memanggil method-method pada helper untuk mendapatkan kembali data atau memiliki helper yang menghasilkan isi HTML seperlunya.
Sebagai satu contoh skenario, mari bayangkan Kita mempunyai sebuah aplikasi yang membutuhkan untuk mendaftar nama pelajar didalam kelas tertentu. Cara yang salah untuk melakukannya yaitu akan menyimpan logic yang dibutuhkan di dalam sebuah halaman JSP :

Seperti yang dapat Kita lihat, yang dihasilkan JSP dari pendekatan ini adalah sedikit berantakan, meski dengan permintaan yang sederhana seperti itu. JSP lainnya yang mungkin butuh untuk mendaftar nama pelajar di dalam sebuah class yang mau tidak mau menyalin logic di dalam halaman ini untuk setiap penggunaan ulang.

Menggunakan pattern View Helper, Kita dapat memisahkan detail data yang didapat kembali kedalam suati JavaBean yang terpisah :

Menggunakan JavaBean tersebut, kode di dalam JSP akan benar-benar disederhanakan. Daripada memiliki kode pembacaan yang tersimpan di dalamnya, semua halaman akan memerlukan kode untuk mendapat kembali sebuah instans class helper, kemudian berubah menjadi nilai-nilai yang diperlukannya, dan memanggil methodnya.


View Helpers menyimpan data model lanjutan
Terkecuali digunakan untuk mendapatkan kembali data secara langsung dari dalam komponen presentasi itu sendiri, class helper dapat digunakan untuk menyimpan data yang telah diterima kembali oleh komponen lain. Dalam kasus ini, class helper berperan sebagai object transfer (lihat Data Transfer Object di bawah).

Untuk menggambarkan ini, Kita akan memodifikasi contoh Kita sebelumnya. Daripada mendapatkan kembali data secara langsung, mari Kita asumsikan bahwa data yang Kita butuhkan telah diletakkan ke dalam scope permintaan oleh sebuah komponen yang terdahulu. Data ini masuk ke form dari JavaBean berikut ini :


Kita memodifikasi JSP kita sebelumnya untuk mencerminkan bean yang berbeda yang kita gunakan, seperti juga menghilangkan method setting parameter :


View helpers menyediakan atau memodifikasi data model yang telah ada
View helper juga memainkan peran dari adapter. Yang terkecuali mampu untuk menyimpan model data lanjutan atau menengah yang yang sebuah view boleh digunakan, mereka juga dapat menyediakan method-method untuk menyesuaikan data di dalam model ketika view mungkin dibutuhkan.

Sebuah contoh dari penyesuaian data yang telah ada seperti itu adalah suatu aplikasi yang berbeda format. Mari Kita pertimbangkan sebuah cerita dimana Kita telah mendapatkan kembali detail sebuah transaksi sebelumnya. Seperti informasi yang akan Kita tampilkan, Kita menemukan bahwa jumlah yang tersedia di dalam sebuah data adalah disimpan dalam US Dollar. Bagaimanapun, view membutuhkan data yang ditampilkan dalam bentuk Peso Filipina. Dalam kasus ini, Kita dapat menambahkan method untuk view helper dimana akan menyesuaikan jumlah dari penyimpanan persistent ke dalam Peso Filipina seperti yang dibutuhkan oleh View.

Contoh lain dari dari suatu adaptasi atau penyesuaian yang biasanya dikerjakan oleh view helper adalah penyusunan kembali item data dalam model. Khususnya untuk daftar yang panjang, kemampuan untuk sorting satu field data model atau lebih memberikan aplikasi Kita dengan kemampuan lebih. logic macam ini dapat disimpan di dalam JavaBean yang berisi model data.

Untuk menggambarkan konsep ini, Kita menggunakan contoh Kita sebelumnya. Sebagai ganti mempunyai sebuah String sederhana untuk setiap masukan daftar meskipun demikian, Kita menggunakan bean helper di bawah ini :


Menggunakan bean helper diatas sebagai model data Kita mengijinkan Kita untuk memilih beberapa field-field ketika sorting daftar.
Kita modifikasi bean ClassListHelper sebelumnya yang menyediakan halaman dengan method yang dapat memilih sorting data. Perhatikan dalam kode di bawah yang ada tanpa implementasi nyata untuk sorting : sorting yang nyata tidak fokus dari contoh Kita yang disini, tetapi lebih bagaimana Kita dapat menggunakan class helper untuk memberi fasilitas mekanisme sorting di dalam halaman Kita.