Friday, April 03, 2009

Så har I mig tilbage ...

... som Kurt Thorsen sagde.

Jeg er så småt begyndt at lege med Wicket igen. Efter at have arbejdet med Tapestry for mange år siden, må jeg sige at jeg har fået en forkærlighed for komponentbaserede web frameworks.

Jeg legede med JSF for et stykke tid siden, men jeg må sige at JSF på ingen måde føles så "rigtigt" som Wicket og Tapestry - dermed ikke sagt af JSF ikke har sine lyse punkter, f.eks. kan jeg godt lide tanken om "Render Kits" og det at man (måske mest i teorien) kan skifte præsentationen af JSF komponenterne ud, uden at skulle lave nogle eller mange kode-ændringer, men alligevel føltes JSF bare for "tungt". Det er faktisk svært at sætte ord på nøjagtigt hvorfor men igen, det at skrive sit eget komponent til JSF er bare væsentligt mere besværligt end at gøre det samme til Wicket (og Tapestry).

Det der gør komponentbaseret web frameworks så interessante er netop det med at det er nemt at genbruge disse "komponenter". Med ren JSP eller andet template baseret præsentationslag, oplever man ofte at man implementerer det samme igen og igen - og så er der lige det med at hvis denne logik (om det så er i en JSP include, eller implementeret som JSP Tag), skal bruge noget data fra backenden, ja så skal den "Action" (for at bruge et Struts udtryk) som forwarder til præsentationssiden, vide dette på forhånd og sørge for at aggregere alt data, som alle Tags, ell. includes skal anvende, binde det i formen eller de rigtige request attributter, og SÅ give téten videre til siden. Med komponenter i en komponentbaseret verden, sørger de selv for evt. at hente data - man kan sige at man "uddelegerer" opgaven og komponenterne er selvstændige.

Der er rigtigt mange årsager til at jeg går efter Wicket, men hvis man bli'r en smule varm om inderlårene når man tænker på Unit Tests, så bliver bekendtskabet med Wicket måske mere spændende end man havde håbet på - så knib nu benene sammen :-) :



public class MyPageComponentsTest extends TestCase {

private WicketTester tester;

public void setUp() {
tester = new WicketTester();
}

public void testMyPageComponents() {
WicketTester tester = new WicketTester();
tester.startPage(MyPage.class);

// assert rendered field components
tester.assertComponent("myForm:firstName", TextField.class);
tester.assertComponent("myForm:lastName", TextField.class);

// assert rendered label components
tester.assertLabel("myForm:firstNameLabel", "First Name");
tester.assertLabel("myForm:lastNameLabel", "Last Name");
}

public void testOnClickAction() {
tester.startPage(MyPage.class);

// click link and render
tester.clickLink("nextPage");

tester.assertRenderedPage(NextPage.class);
tester.assertLabel("nextPageMessage", "Hello!");
}



Ja - det er da nogle tests som IKKE er nemme at lave for JSP sider :-)

0 Comments:

Post a Comment

<< Home