Design by similarity


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 metodernadisplayCustomerFormprocessNewCustomerprocessExistingCustomer eller searchSsnnågonsin använder parametrarna mappingrequest 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;
}
  1. No comments yet.
(will not be published)