BAB 7
Pe n ge n a la n Ar sit e k t u r M V C
7 .1 Pe n ge n a la n Ar sit e k t u r M ode l- V ie w - Con t r olle r
Arsit ekt ur Model- View- Cont roller adalah sebuah pola yang t erbukt i m em bangun proyek secara lebih efekt if. Hal it u dilakukan dengan m em ilah kom ponen ant ara Model, View dan Cont roller pada bagian – bagian dalam proyek.
7 . 1 . 1 M ot iv a si
Aplikasi apapun, bagian dalam kode yang sering m engalam i perubahan adalah bagian user int erface. User int erface adalah bagian yang paling t erlihat oleh user dan bagaim ana ia berint eraksi dengan aplikasi, m em buat nya m enj adi t it ik fokus pengubahan berdasar kem udahan penggunaan.
Business- logic yang rum it pada user- int erface m em buat pengubahan pada user int erface m enj adi lebih kom pleks dan m udah t erj adi kesalahan. Perubahan pada sat u bagian m em ilik i pot ensi ket erkait an dengan keseluruhan aplikasi.
7 . 1 . 2 Solu si
Diagram di at as m enunj ukkan 3 kom ponen yang t erdapat dalam pola MVC dan int eraksi yang t erj adi.
7 .2 M OD EL
Pola MVC m em iliki layer yang disebut dengan Model yang m erepresent asikan dat a yang digunakan oleh aplikasi sebagaim ana proses bisnis yang diasosiasikan t erhadapnya. Dengan m em ilahnya sebagai bagian t erpisah, sepert i penam pungan dat a, persist ence, sert a proses m anipulasi, t erpisah dari bagian lain aplikasi.
Terdapat beberapa kelebihan dalam pendekat an ini. Per t am a, m em buat det ail dari dat a dan operasinya dapat dit em pat kan pada area yang dit ent ukan ( Model) dibanding t ersebar dalam keseluruhan lingkup aplikasi. Hal ini m em ber ikan keunt ungan dalam proses m aint enance aplikasi.
Kedua, dengan pem isahan t ot al ant ara dat a dengan im plem ent asi int erface, kom ponen m odel dapat digunakan kem bali oleh aplikasi lain yang m em ilik i kegunaan yang ham pir sam a.
7 .3 V I EW
Penggunaan layer View m em iliki beberapa kelebihan : Pert am a, m em udahkan pengabungan divisi desain dalam developm ent t eam . Divisi desain dapat berkonsent rasi pada st yle, look & feel, dan sebagainya, dalam aplikasi t anpa harus m em perhat ikan lebih pada det ail yang lain.
Dan j uga, m em iliki layer View y ang t erpisah m em ungkinkan ket ersediaan m ult iple int erface dalam aplikasi. Jika int i dari aplikasi t erlet ak pada bagian lain ( dalam Model) , m ult iple int erfaces dapat dibuat ( Sw ing, Web, Console) , secara keseluruhan m em iliki t am pilan yang berbeda nam un m engeksekusi kom ponen Model sesuai fungsionalit as yang diharapkan.
7 .4 CON TROLLER
Terakhir, arsit ekt ur MVC m em ilik i layer Cont roller. Layer ini m enyediakan det ail alur program dan t ransisi layer, dan j uga bert anggungj aw ab akan penam pungan event s yang dibuat oleh user dari View dan m elakukan updat e t erhadap kom ponen Model m enggunakan dat a yang dim asukkan oleh user.
Kelebihan dalam penggunaan layer Cont roller secara t erpisah : Pert am a, dengan m enggunakan kom ponen t erpisah unt uk m enam pung det ail dari t ransisi layer, kom ponen view dapat didesain t anpa harus m em perhat ikan bagian lain secara berlebih. Hal ini m em udahkan t eam pengem bang m ult iple int erface bekerj a secara t erpisah dari yang lain secara sim ult an. I nt eraksi ant ar kom ponen View t erabst raksi dalam Cont roller.
Kedua, dengan m enggunakan layer t erpisah yang m elakukan updat e t erhadap kom ponen Model, det ail t ersebut dihapus dari layer present asi. Layer present asi kem bali pada fungsi ut am anya unt uk m enam pilkan dat a k epada user. Det ail t ent ang bagaim ana dat a dari user m engubah ket et apan aplikasi disem bunyikan oleh Cont roller. Hal ini m em isahkan dengan j elas ant ara present at ion logic dengan business logic.
7 .5 Ar sit e k t u r M V C Un t u k W e b : Ar sit e k t u r M ode l 2
Arst it ekt ur MVC secara sederhana dirancang dan diadapt asi dalam penggunaan dalam Web- Applicat ion. Arsit ekt ur yang dihasilkan kem udian disebut dengan Model 2 Archit ect ure.
Aplikasi Model 2 um um nya m em ilik i :
o Servlet Cont roller yang m enyediakan akses t unggal t erhadap keseluruhan aplikasi. Cont roller ini bert anggungj aw ab m enyediakan m anaj em en t erpusat t erhadap alur aplikasi dan j uga service lain sepert i penganganan securit y dan user m anagem ent .
o Cont roller Servlet um um nya m enggunakan konfigurasi XML unt uk m enent ukan alur aplik asi dan pem rosesan perint ah. Hal it u j uga m em buat helper com ponent s yang berfungsi sebagai Com m and obj ect s. Hal ini berart i helper com ponent s t erasosiasikan dengan user act ions dan dibuat / dipanggil unt uk m enangani act ions yang t erj adi, m em anggil kom ponen Model sebagaim ana diperlukan. Hal ini berfungsi unt uk m em isahkan unt uk m em isahkan ant ara cont roller serv let dari Model.
7 .5 .1 M ode l 2 D ia gr a m
I m plem ent asi sebuah pola dapat diperm udah dengan m enggunakan t hird- part y fram ework. Fram eworks t ersebut m enyediakan det ail t erkait ( request , konfigurasi, dan sebagainya) sehingga kit a dapat berkonsent ras pada hal lain yang lebih pent ing. Fram ew orks t ersebut j uga m enyediakan fungsi - fungsi t am bahan.
7 .5 .2 STRUTS
St rut s adalah open- source fram ework yang dibuat oleh Apache Soft ware Foundat ion. Dibaw ah ini m enunj ukkan bagaim ana penanganan Model 2 Archit ect ure oleh St rut s.
7 .5 .3
CON TROLLER
7 .5 .3 .1 Act ion Se r vle t
Pusat dari im plem ent asi cont roller pada St rut s adalaha Act ion Se r v le t. Berfungsi
sebagai Front Cont roller servlet dan m enyediakan j alur t unggal unt uk m engakses aplikasi. Act ionServlet j uga m engandung logic dalam penanganan request dari client – t erlihat pada HTTP request dari client , kem udian dit eruskan m enuj u sebuah halam an Web at au m engirim kan request t ersebut obj ect penerim a yang disebut dengan Act ion s yang kem udian bert anggungj aw ab unt uk m enent ukan respon yang
akan dihasilkan.
Act ionServlet m em iliki det ail – det ail sebagai berikut , Act ion apa yang akan dipanggil unt uk m enangani request , kom ponen view m ana yang akan dipanggil selanj ut nya – dengan m em baca konfigurasi XML, yang um unya bernam a st r u t s- config.x m l. Servlet ini m enyediakan st rut s fram ew ork yang siap digunakan. Secara keseluruhan pent ing unt uk m enyert akannya pada aplikasi sebagai konfigurasi pada deploym ent aplikasi.
7 .5 .3 .2 Act ion
Sepert i yang t elah disebut kan sebelum nya, beberapa request dari client dit eruskan m enuj u Act ion yang sesuai oleh front cont roller servlet . Seluruh act ion obj ect s m endefinisikan sebuah m et hod yang disebut execut e( ) , dan m et hod inilah yang dipanggil oleh Act ionServlet unt uk m enangani request yang t erj adi.
Akt ifit as um um dalam aplikasi w eb adalah user log- in. Dit unj ukkan di bawah ini adalah im plem ent asi dari LoginAct ion class yang berfungsi unt uk m enangani request t ersebut .
import org.apache.struts.action.*
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping,
// Membuat business object yang akan menangani request UserService service = new UserService();
user = service.login(loginName, password);
// Jika user tidak ada, diteruskan pada error page if (user == null) {
return mapping.findForward("failure"); }
// Simpan pada session untuk digunakan pada proses aplikasi selanjutnya HttpSession session = request.getSession();
session.setAttribute(ApplicationConstants.USER_OBJECT, user);
// User telah log-in dengan sukses. return mapping.findForward("success"); }
}
diim plem ent asikan dalam Act ion it u sendiri. Proses yang akan dij alank an pada Act ion adalah sebagai berikut :
o Menam pung inform asi user dari Act ionForm bean t erkait
o Menerj em ahkan dat a dari form m enj adi param et er yang diperlukan oleh business obj ect yang m engim plem ent asikan fungsionalit asnya
o Menam pung hasil operasi dari business obj ect dan m enent ukan View selanj ut nya yang akan dit am pilkan pada user
o Secara opsional, m enyim pan dat a hasil dari operasi bisnis ke dalam session at au request obj ect s unt uk digunakan dalam proses aplikasi selanj ut nya
Hal lain yang perlu diperhat ikan pada saat m em buat kode inst ances dari Act ion obj ect s adalah bahwa fram ework hanya akan m enginst ansiasi sat u salinan obj ect dan m enggunakannya unt uk m em fasilit asi seluruh request . Hal ini berart i kit a harus selalu m em buat kode Act ion dalam t hread- safe, dan m em ast ikan bahwa hanya local variabel yang digunakan, bukan inst ance variabel.
Act ion inst ances berkem am puan unt uk m enginst ruksikan Act ionServlet dalam m em ilih kom ponen View m ana yang akan digunakan dalam m erespon dengan m engem balikan inst ances dari obj ek Act ion For w a r d. Act ions m em iliki akses t erhadap Act ionForward m elalui penggunaan Act ion M a ppin g yang m engenkapsulasi dat a dari pem et aan logical pat h pada set iap Act ion. Pem et aan t ersebut dibaca dari file konfigurasi oleh Act ionSer vlet , yang kem udian bert anggungj aw ab unt uk m eneruskan Act ionMapping pada Act ion yang sesuai. Sehingga m enginst ruksikan Act ionServlet unt uk m eneruskan pada logical m ap dengan hasil “ Success” , Act ion bekerj a sesuai pernyat aan berikut :
7 .5 .3 .3 Act ion For m
St rut s fram ework m enyediakan sebuah class yang disebut dengan Act ionForm . I nst ances dari class ini digunakan unt uk m em fasilit asi penam pungan dat a yang berasal dari form yang dikum pulkan dari user pada Act ion inst ances yang m enangani event s pada form t ersebut .
Tiap inst ances dari Act ionForm m erepresent asikan sebuah form at au rangkaian form s. I nst ances t ersebut m endefinisikan propert ies dar i elem en – elem en form , dan m em publik asikannya dengan m enggunakan get t ers dan set t ers yang dapat diakses secara public. Act ion yang m em erlukan dat a dari form kem udian m em anggil m et hod get t er dari inst ance Act ionForm .
St rut s m enyert akan definisi class dasar; developer bert anggungj awab penuh at as im plem ent asi buat an m ereka sendiri.
Kode dibawah m enunj ukkan Act ionForm yang digunakan pada cont oh sebelum nya :
import org.apache.struts.action.*;
public class LoginForm extends ActionForm { private String loginName;
Beberapa hal yang perlu diingat pada saat pengkodean Act ionForm :
o Mendefinisikan propert ies ( dengan asosiasi t erhadap m et hod get dan set ) unt uk t iap elem en yang akan direpresent asikan pada form
o Hindari penem pat an business logic pada Act ionForm . Act ionForm dit uj ukan unt uk m ent ransfer dat a ant ara kom ponen View dan Cont roller, dan bukan dit uj ukan unt uk business logic.
7 .5 .3 .4 st r u t s- con fig.x m l
File ini berfungsi sebagai file konfigurasi kom ponen – kom ponen yang t erdapat pada St rut s. Disini, kit a dapat m endefinisikan Act ion m ana yang akan dipanggil unt uk t iap request , form m ana yang akan digunakan pada t iap Act ion, dan m em et akan logical nam es pada act ual pat h, diant ara hal – hal lain. Berikut ini adalah pot ongan dari st rut s- config.xm l yang digunakan pada cont oh di at as :
<?xml version=”1.0”?>
<!DOCTYPE struts-config PUBLIC “-//Apache Software Foundation//DTD Struts Configuration 1.1//EN”
“http://jakarta.apache.org/struts/dtds/struts-Elem en ini m endefinisikan file XML sebagai file konfigurasi dalam penggunaan St rut s fram ework. Terlewat dan kesalahan dalam penulisan kode, akan m enghasilkan error pada saat aplikasi dij alankan.
< st rut s- config>
Elem en dasar dalam file konfigurasi. Seluruh elem en lain adalah elem en t urunan dari elem en ini.
< form - beans>
Elem en ini m enandai awal dan akhir definisi dar i Act ionForm inst ances. Elem en < form - bean> harus diposisikan sebagai t urunan dari elem en ini.
< form - bean>
Menj elaskan inst ance dari Act ionForm yang dapat digunakan oleh aplikasi. Elem en ini m em iliki dua at ribut :
< act ion- m appings>
Elem en ini m enandai awal dan akhir definisi Act ion dan pem et aannya. Seluruh elem en < act ion> harus diposisikan sebagai t it ik t urunan dari elem en ini.
< act ion>
Menj elaskan inst ance dari Act ion obj ect yang akan digunakan oleh aplikasi. Secar a um um , elem en act ion akan m engim plem ent asikan at ribut - at ribut sebagai berikut :
o pat h – cont ext relat iv e pat h yang digunakan oleh Act ion. Request apapun pada pat h ini m enghasilkan Act ion dipanggil
o t ype – deskripsi lengkap nam a class dari Act ion class
o nam e – nam a elem en < form - bean> yang akan digunakan oleh Act ion
o scope – lingkup dim ana Act ionForm yang dapat diakses. Hal ini m engat ur dim ana Act ionServlet akan m enyim pan inst ance dari Act ionForm
< forw ard>
Elem en ini m endefinisikan pem et aan logik ant ara sebuah nam e dan pat h pada aplikasi.
Elem en ini m em iliki at ribut sebagai berikut :
o nam e – nam a dari elem en forward yang akan digunakan oleh Act ion inst ance o pat h – pat h dari kom ponen View yang akan diasosiasikan pada forward Hal – hal yang perlu dilakukan pada Cont roller layer :
Unt uk sekali pengat uran :
o Mengkonfigurasi Act ionServlet pada deploym ent aplikasi Unt uk t iap form handler yang akan dit am bahkan pada aplikasi :
o Mem buat obj ect Act ionForm yang akan m enrepresent asikan seluruh dat a yang dikum pulkan dari form
o Mem buat obj ect Act ion dim ana pada m et hod eksekusinya m enj elaskan bagaim ana form akan dit angani
o Mengkonfigurasi obj ect Act ionForm dalam st rut s- config.xm l, pada bagian < form - beans>
o Mengkonfigurasi obj ect Act ion dalam st rut s- config.xm l, pada bagian < act ion-m appings>
7 .5 .4 M OD EL
St rut s fram ework secara eksplisit t idak m enyediakan kom ponen apapun dalam elem en Model. Obj ect m ana yang akan digunakan sebagai kom ponen Model dit ent ukan sepenuhnya oleh developer, um um nya adalah JavaBeans, at au t erkadang EJB.
7 .5 .5 V I EW
St rut s dapat m enggunakan t eknologi present at ion layer apapun, w alaupun pada sebagian kasus yang present at ion layer yang digunakan adalah JSP dan HTML. Apa saj a yang disediakan oleh St rut s, adalah serangkaian dari t ag librar ies yang m engij inkan penggunaan fit ur – fit ur dari St rut s dalam pengum pulan dan validasi form secara ot om at is.
7 .5 .5 .1 st r u t s- h t m l
St rut s m enyert akan sebuah t ag- library, disebut dengan st rut s- ht m l, yang ham pir m enyerupai keseluruhan fungsionalit as st andar HTML, nam un dit am bahkan dengan beberapa fit ur t am bahan.
Tag- library ini ser ing digunakan pada saat m em buat form yang akan dipakai oleh aplikasi. Perhat ikan cont oh dibaw ah ini :
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
<head><title>Login Page</title></head> <body>
<h1> Login Page </h1> <br/>
<html:form action="/login">
User Name : <html:text property="loginName"/> <br/> Password : <html:password property="password"/> <br/> <html:submit>
</html:form>
I ni adalah form yang digunakan pada cont oh sebelum nya. Perhat ikan bagaim ana elem en st andar HTML sepert i < form > , < input t ype= “ t ext “ > , < input t ype= “ password“ > , sert a < input t ype= ” subm it ” > digant ikan oleh t ag dari library st rut s- ht m l. Mari kit a bahas t ags t ersebut sat u- persat u :
Tag < ht m l: form > m enerj em ahkan sebuah HTML form . Tiap form t ag t erasosiasi dengan sebuah act ion m apping yang didefinisikan oleh at ribut a ct ion. Value dalam at ribut act ion m enspesifikasikan pat h dari act ion m apping yang sesuai.
Perhat ikan kem bali file konfigurasi pada cont oh sebelum nya :
...
<action name=”loginForm” path=”/login”
scope=”request”
type=”login.LoginAction”> ...
Dapat kit a lihat bahw a value dari at ribut pat h t erdefinisi pada file konfigurasi sesuai dengan value at ribut act ion pada t ag < ht m l: form > . Hal ini m engindikasikan bahw a dalam form ini, saat diserahkan, akan dit eruskan pada LoginAct ion unt uk dit angani. Salah sat u dari persyarat an dari t ag ht m l: form yang valid adalah t iap field yang m engandungnya harus t ercant um pada Act ionForm unt uk dipet akan pada act ion m apping.
Kem ungkinan at ribut lain :
o m et hod – dapat berupa POST at au GET. Menj elaskan m et hod HTTP yang akan digunakan pada pengirim an form
< ht m l: t ext >
Tag ini m enerj em ahkan st andar HTML t ext input field. Propert y at t ribut e m enent ukan bat asan propert y dalam Act ionForm t erkait . Sebagai cont oh, value dari propert y at t ribut e dari cont oh di at as adalah “ loginNam e” , t ext field ini t erhubung dengan propert y loginNam e pada LoginForm .
At ribut lain yang t ersedia pada t ag ini :
o size – m endefinisikan ukuran dari t ext field yang akan dit am pilkan
o m axlengt h – m enent ukan panj ang m aksim um value yang dapat dim asukkan oleh user
< ht m l: passw ord>
Pada pem bahasan sebelum nya t ent ang ht m l: t ext dan ht m l: password field, dij elaskan bahwa t ag – t ag t ersebut dibat asi oleh propert ies pada Act ionForm yang t erhubung dengan form . Hal ini m enj elaskan bahw a pada prakt eknya value yang dim asukkan oleh user dalam field ini secara ot om at is akan diat ur sesuai bat asan propert ies dalam obj ect Act ionForm . Terlebih lagi, j ika t erdapat value sebelum nya dalam Act ionForm obj ect ( form t ersebut t elah diak ses sebelum nya) , field pada form secara ot om at is pula akan t erisi dengan values dari Act ionForm obj ect .
Tag- t ag lain yang t erdapat pada st rut s- ht m l t ag library : < ht m l: hidden>
Menerj em ahkan HTML hidden pada form field. Cont oh penggunaan :
<html:hidden property="hiddenField"/>
< ht m l: radio>
Menerj em ahkan HTML radio check box. Cont oh penggunaan :
<html:radio property="radioField”/>
< ht m l: select > , < ht m l: opt ion>
ht m l: select digunakan unt uk m enerj em ahkan sebuah drop- dow n list box. Pilihan – pilihan yang t erdapat pada list box didefinisikan m enggunakan t ag ht m l: opt ion. Cont oh penggunaan :
<html:form action="/sampleFormAction">
<html:select property="selectField" size="5">
<html:option value="0 value">0 Label</html:option> <html:option value="1 value">1 Label</html:option> <html:option value="2 value">2 Label</html:option> </html:select>
</html:form>
< ht m l: checkbox> , < ht m l: area>
Digunakan unt uk m enerj em ahkan check box field dan t ext area.
Sepert i yang t erlihat pada pem bahasan sebelum nya ( Advanced JSP) , t erdapat beberapa hal yang perlu dilakukan sebelum m em akai berm acam t ag libraries dalam aplikasi.
Pert am a, let akkan file JAR im plem ent asi dari fungsionalit as t ag dalam direkt ori WEB-I NF/ lib dalam aplikasi.
Beberapa hal yang harus dilakukan t erhadap layer View : Unt uk sat u kali pengat uran :
o Konfigurasi t ag library yang akan digunakan dalam pengem bangan aplikasi o Tem pat kan file JAR y ang m em iliki im plem ent asi t ag libraries pada direkt ori
WEB- I NF/ lib dalam aplik asi Unt uk set iap form yang akan dibuat :
o Buat sebuah direkt ive t aglib pada halam an JSP unt uk m enggunakan st rut s-ht m l t ag library
o Pada pelet akan st andar < form > t ag, gunakan < ht m l: form > , t ent ukan dalam act ion at t ribut e dari pat h Act ion yang akan m enangani form
o Pada posisi pelet ak an HTML field t ags ( < input t ype= ” t ext ” > , dan sebagainya) , gunakan t ags yang t erdapat pada st rut s- ht m l t ag library yang m em iliki fungsi yang sam a ( < ht m l: t ext > , dan sebagainya) .
Past ikan bahw a seluruh input fields yang t erdapat pada form t erdefinisi sebagai propert ies pada Act ionForm obj ect yang t erhubung dengan request . Tidaklah perlu bahwa seluruh propert ies pada obj ect dit am pilkan sebagai field, nam un dipersyarat kan bahwa seluruh fields j uga t erdefinisi sebagai propert ies.
7 .6 M EM AN D AN G H AL- H AL YAN G AD A SECARA KESELURUH AN
Unt uk m em aham i bagaim ana St rut s fram ework berfungsi secara m enyeluruh, perhat ikan scenario yang t erdapat pada cont oh diat as : user logging.
Sebelum seorang user m em asuki sit us, Act ionServlet m engam bil konfigurasi file dan m enelusuri det ail yang ada. Sehingga, pada saat user m engakses form login, fram ework t elah m enget ahui Act ionForm t erkait yang akan m enyim pan det ail dan Act ion yang akan m enanganinya.
Saat halam an login dij alankan, st rut s ht m l t ags yang t elah digunakan berupaya unt uk m enerj em ahkan HTML fields. Jika Act ionForm unt uk form ini t idak ada, halam an t ersebut t idak akan dit am pilkan. Jika t erdapat fields dalam form yang m elebihi propert ies pada Act ionForm unt uk m enopangnya, halam an t ersebut j uga t idak akan dit am pilk an. Jika Act ionForm t ersebut m em ang t elah t erdefinisi sebelum nya, t ags – t ags yang ada akan dit am pilkan j ika t erdapat values sebelum nya yang t ersim pan dalam Act ionForm , dan j uga form fields akan dit am pilkan besert a dat a yang ada. Sebaliknya, form fields akan dibiarkan kosong dan user akan m em peroleh t am pilan form t anpa isian.
Pada saat form diserahkan, values pada form fields secar a ot om at is diat ur ke dalam obj ect Act ionForm oleh St rut s Fram ework. Obj ect ini kem udian dit eruskan m enuj u Act ion handler yang sesuai, selam a Act ionMapping obj ect yang m erefleksikan det ail pem et aan t ercant um pada file konfigurasi.