Muster in Webcontrollern

78
MUSTER IN WEBCONTROLLERN arthur tomas jens himmelreich

description

XPDays 2008, Hamburg

Transcript of Muster in Webcontrollern

Page 1: Muster in Webcontrollern

MUSTER IN WEBCONTROLLERN

arthur tomas jens himmelreich

Page 2: Muster in Webcontrollern

VIEW CONTROLLER

MODEL

Page 3: Muster in Webcontrollern

VIEW CONTROLLER

MODEL

Page 4: Muster in Webcontrollern

VIEW CONTROLLER

MODEL

Page 5: Muster in Webcontrollern

EXKURS

Page 6: Muster in Webcontrollern

VIEW CONTROLLER

MODEL

Page 7: Muster in Webcontrollern

WebMVC

Page 8: Muster in Webcontrollern

FUNKTION

Page 9: Muster in Webcontrollern

HYGIENE

Page 10: Muster in Webcontrollern
Page 11: Muster in Webcontrollern

VIEW CONTROLLER

MODEL

Page 12: Muster in Webcontrollern

CONTROLLER

Page 13: Muster in Webcontrollern

CONTROLLERpublic static void main(String[] arguments) { if(basket.isPaymentCreditCard()) { if( customerService.isCreditCardLock(bask log.info("CreditCard isLocked"); return new ModelAndView(urlComposer.g } CreditCardOrder order = creditCardOrder if(isBankAuthenticationResponse(request)) log.debug("Bank response request with credtitCartService.finalizeAuthentifi } else { AuthentificationIntermediateResponse = creditCardService.beginAuthenti urlComposer.getSslUrl("/Bes if (authResponse.needs5dsecureAuthent log.debug("CreditCard needs 5dsec return show5dSecurePage(authRespo } } if (creditCardService.isAuthenticationErr log.info("creditCardService.isAuthent return new ModelAndView(urlComposer.g } else { log.debug("creditCardService without creditCardService.authorizePayment(ca

Page 14: Muster in Webcontrollern

CONTROLLER

Page 15: Muster in Webcontrollern

CONTROLLER

?

Page 16: Muster in Webcontrollern

KOMPLEXESSETUP

Page 17: Muster in Webcontrollern

REQUESTRESPONSE

Page 18: Muster in Webcontrollern
Page 19: Muster in Webcontrollern

EXPERIMENT

Page 20: Muster in Webcontrollern

if(basket.isPaymentCreditCard()) { if( customerService.isCreditCardLock(basket.getCardNumber()) ) { log.info("CreditCard isLocked"); return new ModelAndView(urlComposer.getSslRedirectUrl("/Zahlungs } CreditCardOrder creditCardOrder = creditCardOrderFactory.newPoseidonOrder( if(isBankAuthenticationResponse(request)) { log.debug("Bank response request with: CREDITCARD_5dSECURE_BANK_ creditCardService.finalizeAuthentification(get5dSecureBankRespon } else { AuthentificationIntermediateResponse authResponse = poseidonService.beginAuthentification(poseidonOrder, urlComposer.getSslUrl("/Bestell.html?submit1 if (authResponse.needs5dsecureAuthentication()) { log.debug("CreditCard needs 5dsecureAuthentication!"); return show5dSecurePage(authResponse); } } if (creditCardService.isAuthenticationError(creditCardOrder)) { log.info("creditCardService.isAuthenticationError"); return new ModelAndView(urlComposer.getSslRedirectUrl("/Zahl } else { log.debug("creditCardService without AuthenticationError"); creditCardService.authorizePayment(creditCardOrder); if (creditCardService.isSuccessfullAuthorized(creditCardOrder)) log.debug("creditCardService.isSuccessfullAuthorized"); basket.getPaymentMethod().setCardNumber(creditCardOrder.getA

Page 21: Muster in Webcontrollern

CONTROLLER

Page 22: Muster in Webcontrollern

REFACTORING

Page 23: Muster in Webcontrollern

CLEAN

Page 24: Muster in Webcontrollern

REZEPT

Page 25: Muster in Webcontrollern

1

Page 26: Muster in Webcontrollern

2

Page 27: Muster in Webcontrollern

3

Page 28: Muster in Webcontrollern

4

Page 29: Muster in Webcontrollern

5 TEST

Page 30: Muster in Webcontrollern

6

Page 31: Muster in Webcontrollern

7

Page 32: Muster in Webcontrollern

8TEST

Page 33: Muster in Webcontrollern

CLEAN

Page 34: Muster in Webcontrollern

OBJEKTEERKENNEN

Page 35: Muster in Webcontrollern

PARAMETEROBJEKT

Page 36: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 37: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = paymentRuleComposer .compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 38: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = paymentRuleComposer .compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Session session = modelBuildeBasket basket = modelBuilder.Customer customer = modelBuil PaymentRule paymentRule = pay

Page 39: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 40: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 41: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

(session, basket, modelBuilder)

Page 42: Muster in Webcontrollern

public class SessionContext {

private ModelBuilder modelBuilder; private PaymentRule paymentRule; private boolean needsUpdate;

public SessionContext( ModelBuilder modelBuilder, RuleComposer rulecomposer) { this.needsUpdate = false; this.modelBuilder = modelBuilder; this.paymentRule = createPaymentRule(rulecomposer); }// ...}

Page 43: Muster in Webcontrollern

public class SessionContext {

private ModelBuilder modelBuilder; private PaymentRule paymentRule; private boolean needsUpdate;

public SessionContext( ModelBuilder modelBuilder, RuleComposer rulecomposer) { this.needsUpdate = false; this.modelBuilder = modelBuilder; this.paymentRule = createPaymentRule(rulecomposer); }// ...}

Page 44: Muster in Webcontrollern

public class SessionContext {

private ModelBuilder modelBuilder; private PaymentRule paymentRule; private boolean needsUpdate;

public SessionContext( ModelBuilder modelBuilder, RuleComposer rulecomposer) { this.needsUpdate = false; this.modelBuilder = modelBuilder; this.paymentRule = createPaymentRule(rulecomposer); }// ...}

SessionContext( ModelBuilder modelBuilder, RuleComposer rulecomposer)

Page 45: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 46: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 47: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext( modelBuilder, paymentRuleComposer);

ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(context);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 48: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(context);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

SessionContext context = new SessionContext( modelBuilder, paymentRuleComposer);

Page 49: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(context);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

disableDesired- DeliveryDate(context);

Page 50: Muster in Webcontrollern

ECHTESOBJEKT

Page 51: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(context);

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 52: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } context.disableDesiredDeliveryDate();

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 53: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } context.setDesiredDeliveryDate();

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

context. disableDesiredDeliveryDate();

Page 54: Muster in Webcontrollern

METHODENOBJEKT

Page 55: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } context.disableDesiredDeliveryDate();

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 56: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } context.disableDesiredDeliveryDate();

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

Page 57: Muster in Webcontrollern

@Overrideprotected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } context.disableDesiredDeliveryDate();

CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket);

putDataToModel(modelBuilder, basket, cc);

getMavIfStateIsNot- ValidForCheckout(context)

Page 58: Muster in Webcontrollern

private ModelAndView getMavIfStateIsNotValidForCheckout( SessionContext context) { if( !context.getBasket().hasLineItems() ) { return new ModelAndView(redirectCartView); } if(!context.getBasket().hasInvoiceAddress()) { return new ModelAndView(redirectInvoiceView); } if(!context.getBasket().isValidForCheckout(paymentRule)) { if( !context.getBasket().isFurnitureOk() || !context.getBasket().isPaymentMethodAllowed( context.getPaymentRule()) || !context.getBasket().isPaymentMethodValid()) { return new ModelAndView(redirectInvoiceAndDeliveryView); } return new ModelAndView(redirectInvoiceView); } return null;}

Page 59: Muster in Webcontrollern

private ModelAndView getMavIfStateIsNotValidForCheckout( SessionContext context) { if( !context.getBasket().hasLineItems() ) { return new ModelAndView(redirectCartView); } if(!context.getBasket().hasInvoiceAddress()) { return new ModelAndView(redirectInvoiceView); } if(!context.getBasket().isValidForCheckout(paymentRule)) { if( !context.getBasket().isFurnitureOk() || !context.getBasket().isPaymentMethodAllowed( context.getPaymentRule()) || !context.getBasket().isPaymentMethodValid()) { return new ModelAndView(redirectInvoiceAndDeliveryView); } return new ModelAndView(redirectInvoiceView); } return null;}

Page 60: Muster in Webcontrollern

private ModelAndView getMavIfStateIsNotValidForCheckout( SessionContext context) { if( !context.getBasket().hasLineItems() ) { return new ModelAndView(redirectCartView); } if(!context.getBasket().hasInvoiceAddress()) { return new ModelAndView(redirectInvoiceView); } if(!context.getBasket().isValidForCheckout(paymentRule)) { if( !context.getBasket().isFurnitureOk() || !context.getBasket().isPaymentMethodAllowed( context.getPaymentRule()) || !context.getBasket().isPaymentMethodValid()) { return new ModelAndView(redirectInvoiceAndDeliveryView); } return new ModelAndView(redirectInvoiceView); } return null;}

!context.get !context.get context.get !context.get

Page 61: Muster in Webcontrollern

public CheckOutState(Basket basket, PaymentRule rule) { this.basket = basket; this.rule = rule; }

public CheckOutStep nextStep() { if (basket.isEmpty()) return CART; if (basket.isValidForCheckout(rule)) return LAST_CHECK; if ((!basket.hasInvoiceAddress()) || (basket.isFurnitureOk() && basket.isPaymentMethodAllowed(rule) && basket.isPaymentMethodValid())) return INVOICE_ADDRESS; return PAYMENT_AND_DELIVERY; }

Page 62: Muster in Webcontrollern

public CheckOutState(Basket basket, PaymentRule rule) { this.basket = basket; this.rule = rule; }

public CheckOutStep nextStep() { if (basket.isEmpty()) return CART; if (basket.isValidForCheckout(rule)) return LAST_CHECK; if ((!basket.hasInvoiceAddress()) || (basket.isFurnitureOk() && basket.isPaymentMethodAllowed(rule) && basket.isPaymentMethodValid())) return INVOICE_ADDRESS; return PAYMENT_AND_DELIVERY; }

CheckOutState( Basket basket, PaymentRule rule)

Page 63: Muster in Webcontrollern

private ModelAndView handleOrderRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception {

SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

CheckOutState state = new CheckOutState( context.getBasket(), context.getPaymentRule());

if (!state.isValidForCheckOut()) return modelAndViewFor(state.nextStep()); context.disableDesiredDeliveryDate();

Page 64: Muster in Webcontrollern

private ModelAndView handleOrderRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception {

SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

CheckOutState state = new CheckOutState( context.getBasket(), context.getPaymentRule());

if (!state.isValidForCheckOut()) return modelAndViewFor(state.nextStep()); context.disableDesiredDeliveryDate();

Page 65: Muster in Webcontrollern

private ModelAndView handleOrderRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception {

SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

CheckOutState state = new CheckOutState( context.getBasket(), context.getPaymentRule());

if (!state.isValidForCheckOut()) return modelAndViewFor(state.nextStep()); context.disableDesiredDeliveryDate();

state = new CheckOutState( context.getBasket(), context.getPaymentRule());

Page 66: Muster in Webcontrollern

protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder);

Page 67: Muster in Webcontrollern

private ModelAndView handleOrderRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception {

SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer);

CheckOutState state = new CheckOutState( context.getBasket(), context.getPaymentRule());

if (!state.isValidForCheckOut()) return modelAndViewFor(state.nextStep()); context.disableDesiredDeliveryDate();

Page 68: Muster in Webcontrollern

ERGO

Page 69: Muster in Webcontrollern

OBJEKT≠ DING

Page 70: Muster in Webcontrollern

OBJEKT = DING

Page 71: Muster in Webcontrollern

OBJEKT ≠ DING

Page 72: Muster in Webcontrollern

SEI HEB AMME

Page 73: Muster in Webcontrollern

OBJEKTEERKENNEN

Page 74: Muster in Webcontrollern

OBJEKTEGEBÄREN

Page 75: Muster in Webcontrollern

OBJEKTEPFLEGEN

Page 76: Muster in Webcontrollern

OBJEKT≠ DINGSEI HEB AMME

Page 77: Muster in Webcontrollern

ENDE

Page 78: Muster in Webcontrollern

CREDITS

von tangaroo

von Axel Pfaender

von binaryCoco

von tilaneseven

von spiffie

von static416

von autowitch

von Daveybot

von woodleywonderworks

von Tim Morgan

von Tim Morgan

von Tim Morgan

von nickwheeleroz

von otisarchives1

von *ejk*

von cuulongden

von Laure Wayaffe

von mab @ flickr

von Kazze

von aesop

von SteveMcN

von canonsnapper

von bies