Archive for January, 2010
Design by similarity
Posted by alexander in Guldkorn aka WTFs on January 19, 2010
Jag blir så glad när ens kloka kolleger i branschen kommer på så tunga saker som nya designprinciper. Det är inte ofta!
I koden nedanför illustreras hur Struts har använts som språngbräda för att skapa en helt nytt sätt att designa interna interface på, nämligen design by similarity.
För att problemet ska bli uppenbart måste dock sägas att íngen av metodernadisplayCustomerForm, processNewCustomer, processExistingCustomer eller searchSsnnågonsin använder parametrarna mapping, request och actionForward. Författaren tyckte dock att koden blev bättre om alla metoder “såg typ lika ut”, fastän de gör helt olika saker. Eller så var han kanske en ny överlagring på spåren…
Metoden nedan innehåller också några andra bonusar för oss som gillar WTFs
public ActionForward executeAction(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response, TransferObject to) throws Exception {
if (customerForm.getOperationFlag().equals("1")) {
actionForward = displayCustomerForm(customerForm, mapping, request, session, messages);
} else if (customerForm.getSelectedAction() != null
&& customerForm.getSelectedAction().equals("join_us")) {
actionForward = processNewCustomer(customerForm, mapping, request, session, messages, actionForward);
} else if (customerForm.getSelectedAction() != null
&& customerForm.getSelectedAction().equals("already_joined")) {
actionForward = processExistingCustomer(customerForm, mapping, request, actionForward, messages);
} else if (customerForm.getSelectedAction() != null
&& customerForm.getSelectedAction().equals("findBySsn")) {
actionForward = searchSsn(customerForm, mapping, request, actionForward, messages);
} else {
customerForm.setSelectedAction("join_us");
customerForm.setDisplayMandateApprovedByPlayer(true);
customerForm.setMandateApprovedByPlayer(true);
}
saveMessages(request, messages);
return actionForward;
}
Låt inte Lasse Koskela lära er allt ni vet om test doubles
Posted by alexander in Kära dagbok on January 19, 2010
Jag är en varm förespråkare av boken Test Driven: TDD and Acceptance TDD for Java Developers. Det är en otroligt bra bok, och när jag läste den för första gången, innehöll den precis det jag behövde. Den var också min primära källa för EasyMock, och det är också därför jag nu måste lämna en liten brasklapp.
Boken är bra på att lära ut EasyMock, men den gör inte till 100% rätt. Lasse missar avsiktligt eller med mening att betona skillnaden mellan förväntade returns och stubs, och visar inte att man kan skippa verify i vissa fall.
Detta leder till en mockningsstil som ger väldigt sköra (brittle) tester, om man inte fördjupar sig i EasyMock och användning av test doubles på annat håll. Det kan kanske låta självklart, men i mitt fall lyckades jag tillverka ett 150-tal dåliga test av bara farten.
Avancerad flödeskontroll med rollback
Posted by alexander in Guldkorn aka WTFs on January 6, 2010
Att styra programflödet är inte alltid lätt. De flesta är väl överens om att det är jättedåligt att använda exceptions för att styra flödet, men författaren av denna snutt håller nog inte med, och har dessutom tagit nästa steg genom att styra med serverns context och status på rollbacken:
try {
// ... Hundratals rader kod
} catch (ThingException pe) {
logger.info("Could not create customer for this thing with thing_id: " + thing.getThingId() + ", " + pe.getMessage());
noOfImportedInvalidThings++;
if (ctx.getRollbackOnly()) {
throw new BatchJobException("Transaction was rolled back in sub routine for thing_id: " + thing.getThingId(), pe);
}
}
Har bytt ut några variabelnamn för att skydda den skyldige. “ThingException” och “thing” heter något annat i verkligneten.
Varför ingenting har hänt på ett tag
Posted by alexander in Kära dagbok on January 6, 2010
Jag har inte skrivit på bloggen på ett tag. Detta av två anledningar:
1) Jul och en del förändringar i privatlivet
2) Funderar på att höja kvaliteten på bloggen genom att byta motor (den har man hört några gånger), men framför allt skriva färre, men bättre inlägg. Eller kanske blanda lite genom att ha en “blogg” och en artikelkategori. Vi får se.
Jaja. Vill inte att bloggen ska dö, så jag lägger ut en liten WTF i nästa inlägg i alla fall.