SlideShare a Scribd company logo
MUSTER IN
WEBCONTROLLERN
arthur tomas
jens himmelreich
VIEW CONTROLLER
MODEL
VIEW CONTROLLER
MODEL
VIEW CONTROLLER
MODEL
EXKURS
VIEW CONTROLLER
MODEL
WebMVC
FUNK
TION
HYGI
ENE
VIEW CONTROLLER
MODEL
CONTROLLER
CONTROLLER
public 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
CONTROLLER
CONTROLLER
?
KOMPLEXES
SETUP
REQUEST
RESPONSE
EXPERIMENT
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
CONTROLLER
REFACTORING
CLEAN
REZ
EPT
1
2
3
4
5 TE
ST
6
7
8 TE
ST
CLEAN
OBJEKTE
ERKENNEN
PARAMETER
OBJEKT
@Override
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);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
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 = 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);
@Override
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 = 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 = modelBuilde
Basket basket = modelBuilder.
Customer customer = modelBuil
PaymentRule paymentRule = pay
@Override
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);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
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);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
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);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
(session, basket, modelBuilder)
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);
}
// ...
}
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);
}
// ...
}
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)
@Override
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);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
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);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected 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);
@Override
protected 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);
@Override
protected 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);
ECHTES
OBJEKT
@Override
protected 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);
@Override
protected 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);
@Override
protected 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();
METHODEN
OBJEKT
@Override
protected 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);
@Override
protected 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);
@Override
protected 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)
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;
}
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;
}
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
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;
}
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)
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();
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();
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());
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);
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();
ER
GO
OBJEKT
≠DING
OBJEKT = DING
OBJEKT ≠ DING
SEIHEB
AMME
OBJEKTE
ERKENNEN
OBJEKTE
GEBÄREN
OBJEKTE
PFLEGEN
OBJEKT
≠DING
SEIHEB
AMME
EN
DE
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

More Related Content

What's hot

Modern Android Architecture
Modern Android ArchitectureModern Android Architecture
Modern Android Architecture
Eric Maxwell
 
Lessons Learned: Migrating Tests to Selenium v2
Lessons Learned: Migrating Tests to Selenium v2Lessons Learned: Migrating Tests to Selenium v2
Lessons Learned: Migrating Tests to Selenium v2
rogerjhu1
 
Checkout in Magento 2 by Max Pronko
Checkout in Magento 2 by Max PronkoCheckout in Magento 2 by Max Pronko
Checkout in Magento 2 by Max Pronko
Max Pronko
 
Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development
Mahmoud Hamed Mahmoud
 
ASP.NET MVC 3.0 Validation
ASP.NET MVC 3.0 ValidationASP.NET MVC 3.0 Validation
ASP.NET MVC 3.0 Validation
Eyal Vardi
 
Rolebased security
Rolebased securityRolebased security
Rolebased security
Sudhanshu Kumar
 
droidQuery: The Android port of jQuery
droidQuery: The Android port of jQuerydroidQuery: The Android port of jQuery
droidQuery: The Android port of jQuery
PhDBrown
 
Taming forms with React
Taming forms with ReactTaming forms with React
Taming forms with React
GreeceJS
 
I os 03
I os 03I os 03
I os 03
信嘉 陳
 
How to integrate paytm payment gateway using react js in seven easy steps
How to integrate paytm payment gateway using react js in seven easy stepsHow to integrate paytm payment gateway using react js in seven easy steps
How to integrate paytm payment gateway using react js in seven easy steps
Katy Slemon
 
MongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDBMongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB
 
Webit expo Standard Product
Webit expo Standard ProductWebit expo Standard Product
Webit expo Standard Product
Boji Ditcheva
 
course js day 3
course js day 3course js day 3
course js day 3
Georgyi Grigoryev
 
Manipulating Magento - Mage Titans Italy 2018
Manipulating Magento - Mage Titans Italy 2018Manipulating Magento - Mage Titans Italy 2018
Manipulating Magento - Mage Titans Italy 2018
Joke Puts
 
Braintree and our new v.zero SDK for iOS
Braintree and our new v.zero SDK for iOSBraintree and our new v.zero SDK for iOS
Braintree and our new v.zero SDK for iOS
Alberto López Martín
 
Design Patterns for Tablets and Smartphones
Design Patterns for Tablets and SmartphonesDesign Patterns for Tablets and Smartphones
Design Patterns for Tablets and Smartphones
Michael Galpin
 
Why SOLID matters - even for JavaScript
Why SOLID matters - even for JavaScriptWhy SOLID matters - even for JavaScript
Why SOLID matters - even for JavaScript
martinlippert
 
Bare-knuckle web development
Bare-knuckle web developmentBare-knuckle web development
Bare-knuckle web development
Johannes Brodwall
 
Symfony2. Form and Validation
Symfony2. Form and ValidationSymfony2. Form and Validation
Symfony2. Form and Validation
Vladimir Doroshenko
 

What's hot (19)

Modern Android Architecture
Modern Android ArchitectureModern Android Architecture
Modern Android Architecture
 
Lessons Learned: Migrating Tests to Selenium v2
Lessons Learned: Migrating Tests to Selenium v2Lessons Learned: Migrating Tests to Selenium v2
Lessons Learned: Migrating Tests to Selenium v2
 
Checkout in Magento 2 by Max Pronko
Checkout in Magento 2 by Max PronkoCheckout in Magento 2 by Max Pronko
Checkout in Magento 2 by Max Pronko
 
Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development
 
ASP.NET MVC 3.0 Validation
ASP.NET MVC 3.0 ValidationASP.NET MVC 3.0 Validation
ASP.NET MVC 3.0 Validation
 
Rolebased security
Rolebased securityRolebased security
Rolebased security
 
droidQuery: The Android port of jQuery
droidQuery: The Android port of jQuerydroidQuery: The Android port of jQuery
droidQuery: The Android port of jQuery
 
Taming forms with React
Taming forms with ReactTaming forms with React
Taming forms with React
 
I os 03
I os 03I os 03
I os 03
 
How to integrate paytm payment gateway using react js in seven easy steps
How to integrate paytm payment gateway using react js in seven easy stepsHow to integrate paytm payment gateway using react js in seven easy steps
How to integrate paytm payment gateway using react js in seven easy steps
 
MongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDBMongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDB
 
Webit expo Standard Product
Webit expo Standard ProductWebit expo Standard Product
Webit expo Standard Product
 
course js day 3
course js day 3course js day 3
course js day 3
 
Manipulating Magento - Mage Titans Italy 2018
Manipulating Magento - Mage Titans Italy 2018Manipulating Magento - Mage Titans Italy 2018
Manipulating Magento - Mage Titans Italy 2018
 
Braintree and our new v.zero SDK for iOS
Braintree and our new v.zero SDK for iOSBraintree and our new v.zero SDK for iOS
Braintree and our new v.zero SDK for iOS
 
Design Patterns for Tablets and Smartphones
Design Patterns for Tablets and SmartphonesDesign Patterns for Tablets and Smartphones
Design Patterns for Tablets and Smartphones
 
Why SOLID matters - even for JavaScript
Why SOLID matters - even for JavaScriptWhy SOLID matters - even for JavaScript
Why SOLID matters - even for JavaScript
 
Bare-knuckle web development
Bare-knuckle web developmentBare-knuckle web development
Bare-knuckle web development
 
Symfony2. Form and Validation
Symfony2. Form and ValidationSymfony2. Form and Validation
Symfony2. Form and Validation
 

Viewers also liked

Agile Softwareentwicklung nach Winston Royce
Agile Softwareentwicklung nach Winston RoyceAgile Softwareentwicklung nach Winston Royce
Agile Softwareentwicklung nach Winston Royce
Jens Himmelreich
 
Das agile Ich (extended version)
Das agile Ich (extended version)Das agile Ich (extended version)
Das agile Ich (extended version)
Jens Himmelreich
 
Skalierungsprobleme im eCommerce
Skalierungsprobleme im eCommerceSkalierungsprobleme im eCommerce
Skalierungsprobleme im eCommerce
Jens Himmelreich
 
ConwaysLawRevisited
ConwaysLawRevisitedConwaysLawRevisited
ConwaysLawRevisited
Jens Himmelreich
 
интернет коммуникации в привлечении пациентов февраль 2010
интернет коммуникации в привлечении пациентов февраль 2010интернет коммуникации в привлечении пациентов февраль 2010
интернет коммуникации в привлечении пациентов февраль 2010Andrey Enkin
 
Piloter la DSI
Piloter la DSIPiloter la DSI
Piloter la DSI
Luis Becerra
 
Jejak Tuhan
Jejak TuhanJejak Tuhan
Jejak Tuhan
Petrus Paryono
 
Portfolio alignment with business intentions
Portfolio alignment with business intentionsPortfolio alignment with business intentions
Portfolio alignment with business intentions
Luis Becerra
 
Der pathologische Programmierer
Der pathologische ProgrammiererDer pathologische Programmierer
Der pathologische Programmierer
Jens Himmelreich
 
The Island Of Samoa
The Island Of Samoa The Island Of Samoa
The Island Of Samoa
sdaevan
 
Применение автоматизированных систем управления в медицине
Применение автоматизированных систем управления в медицинеПрименение автоматизированных систем управления в медицине
Применение автоматизированных систем управления в медицинеAndrey Enkin
 
Sound follows function // Sound communication and the relevance of timbre.
Sound follows function // Sound communication and the relevance of timbre.Sound follows function // Sound communication and the relevance of timbre.
Sound follows function // Sound communication and the relevance of timbre.
audity
 

Viewers also liked (12)

Agile Softwareentwicklung nach Winston Royce
Agile Softwareentwicklung nach Winston RoyceAgile Softwareentwicklung nach Winston Royce
Agile Softwareentwicklung nach Winston Royce
 
Das agile Ich (extended version)
Das agile Ich (extended version)Das agile Ich (extended version)
Das agile Ich (extended version)
 
Skalierungsprobleme im eCommerce
Skalierungsprobleme im eCommerceSkalierungsprobleme im eCommerce
Skalierungsprobleme im eCommerce
 
ConwaysLawRevisited
ConwaysLawRevisitedConwaysLawRevisited
ConwaysLawRevisited
 
интернет коммуникации в привлечении пациентов февраль 2010
интернет коммуникации в привлечении пациентов февраль 2010интернет коммуникации в привлечении пациентов февраль 2010
интернет коммуникации в привлечении пациентов февраль 2010
 
Piloter la DSI
Piloter la DSIPiloter la DSI
Piloter la DSI
 
Jejak Tuhan
Jejak TuhanJejak Tuhan
Jejak Tuhan
 
Portfolio alignment with business intentions
Portfolio alignment with business intentionsPortfolio alignment with business intentions
Portfolio alignment with business intentions
 
Der pathologische Programmierer
Der pathologische ProgrammiererDer pathologische Programmierer
Der pathologische Programmierer
 
The Island Of Samoa
The Island Of Samoa The Island Of Samoa
The Island Of Samoa
 
Применение автоматизированных систем управления в медицине
Применение автоматизированных систем управления в медицинеПрименение автоматизированных систем управления в медицине
Применение автоматизированных систем управления в медицине
 
Sound follows function // Sound communication and the relevance of timbre.
Sound follows function // Sound communication and the relevance of timbre.Sound follows function // Sound communication and the relevance of timbre.
Sound follows function // Sound communication and the relevance of timbre.
 

Similar to Muster in Webcontrollern

Building an End-to-End AngularJS Application
Building an End-to-End AngularJS ApplicationBuilding an End-to-End AngularJS Application
Building an End-to-End AngularJS Application
Dan Wahlin
 
Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...
Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...
Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...
Dan Wahlin
 
HTML5 Gaming Payment Platforms
HTML5 Gaming Payment PlatformsHTML5 Gaming Payment Platforms
HTML5 Gaming Payment Platforms
Jonathan LeBlanc
 
Dependency injection - the right way
Dependency injection - the right wayDependency injection - the right way
Dependency injection - the right way
Thibaud Desodt
 
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docxVersion1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
tienboileau
 
Jasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-casJasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-cas
ellentuck
 
MVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin WayMVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin Way
Zeyad Gasser
 
Mad Max is back, plus the rest of our new reviews and notable screenings
Mad Max is back, plus the rest of our new reviews and notable screeningsMad Max is back, plus the rest of our new reviews and notable screenings
Mad Max is back, plus the rest of our new reviews and notable screenings
chicagonewsonlineradio
 
GigaSpaces XAP - Don't Call Me Cache!
GigaSpaces XAP - Don't Call Me Cache!GigaSpaces XAP - Don't Call Me Cache!
GigaSpaces XAP - Don't Call Me Cache!
Uri Cohen
 
Authorization iii
Authorization iiiAuthorization iii
Authorization iii
sonia merchant
 
(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?
RST Software Masters
 
Tinkerbelles return home from their Guinness world-record attempt on Sunday
Tinkerbelles return home from their Guinness world-record attempt on SundayTinkerbelles return home from their Guinness world-record attempt on Sunday
Tinkerbelles return home from their Guinness world-record attempt on Sunday
chicagonewsyesterday
 
Rushed to Victory Gardens' stage, An Issue of Blood is more effusion than play
Rushed to Victory Gardens' stage, An Issue of Blood is more effusion than playRushed to Victory Gardens' stage, An Issue of Blood is more effusion than play
Rushed to Victory Gardens' stage, An Issue of Blood is more effusion than play
chicagonewsyesterday
 
Introduction to Zend Framework web services
Introduction to Zend Framework web servicesIntroduction to Zend Framework web services
Introduction to Zend Framework web services
Michelangelo van Dam
 
Mastering Oracle ADF Bindings
Mastering Oracle ADF BindingsMastering Oracle ADF Bindings
Mastering Oracle ADF Bindings
Euegene Fedorenko
 
Dont call me cache java version
Dont call me cache java versionDont call me cache java version
Dont call me cache java version
Avisi B.V.
 
Dont call me cache april 17
Dont call me cache april 17Dont call me cache april 17
Dont call me cache april 17
Nati Shalom
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern
NAVER Engineering
 
Discontinuing Reader Matches
Discontinuing Reader MatchesDiscontinuing Reader Matches
Discontinuing Reader Matches
chicagonewsonlineradio
 
Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 forms
Eyal Vardi
 

Similar to Muster in Webcontrollern (20)

Building an End-to-End AngularJS Application
Building an End-to-End AngularJS ApplicationBuilding an End-to-End AngularJS Application
Building an End-to-End AngularJS Application
 
Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...
Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...
Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...
 
HTML5 Gaming Payment Platforms
HTML5 Gaming Payment PlatformsHTML5 Gaming Payment Platforms
HTML5 Gaming Payment Platforms
 
Dependency injection - the right way
Dependency injection - the right wayDependency injection - the right way
Dependency injection - the right way
 
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docxVersion1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
 
Jasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-casJasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-cas
 
MVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin WayMVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin Way
 
Mad Max is back, plus the rest of our new reviews and notable screenings
Mad Max is back, plus the rest of our new reviews and notable screeningsMad Max is back, plus the rest of our new reviews and notable screenings
Mad Max is back, plus the rest of our new reviews and notable screenings
 
GigaSpaces XAP - Don't Call Me Cache!
GigaSpaces XAP - Don't Call Me Cache!GigaSpaces XAP - Don't Call Me Cache!
GigaSpaces XAP - Don't Call Me Cache!
 
Authorization iii
Authorization iiiAuthorization iii
Authorization iii
 
(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?
 
Tinkerbelles return home from their Guinness world-record attempt on Sunday
Tinkerbelles return home from their Guinness world-record attempt on SundayTinkerbelles return home from their Guinness world-record attempt on Sunday
Tinkerbelles return home from their Guinness world-record attempt on Sunday
 
Rushed to Victory Gardens' stage, An Issue of Blood is more effusion than play
Rushed to Victory Gardens' stage, An Issue of Blood is more effusion than playRushed to Victory Gardens' stage, An Issue of Blood is more effusion than play
Rushed to Victory Gardens' stage, An Issue of Blood is more effusion than play
 
Introduction to Zend Framework web services
Introduction to Zend Framework web servicesIntroduction to Zend Framework web services
Introduction to Zend Framework web services
 
Mastering Oracle ADF Bindings
Mastering Oracle ADF BindingsMastering Oracle ADF Bindings
Mastering Oracle ADF Bindings
 
Dont call me cache java version
Dont call me cache java versionDont call me cache java version
Dont call me cache java version
 
Dont call me cache april 17
Dont call me cache april 17Dont call me cache april 17
Dont call me cache april 17
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern
 
Discontinuing Reader Matches
Discontinuing Reader MatchesDiscontinuing Reader Matches
Discontinuing Reader Matches
 
Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 forms
 

More from Jens Himmelreich

Auto, Maschine, Buch
Auto, Maschine, BuchAuto, Maschine, Buch
Auto, Maschine, Buch
Jens Himmelreich
 
kundenorientierte vertikalisierung
kundenorientierte vertikalisierungkundenorientierte vertikalisierung
kundenorientierte vertikalisierung
Jens Himmelreich
 
Software-Hygiene
Software-HygieneSoftware-Hygiene
Software-Hygiene
Jens Himmelreich
 
Schnittmuster
SchnittmusterSchnittmuster
Schnittmuster
Jens Himmelreich
 
Der pathologische Programmierer (revised edition)
Der pathologische Programmierer (revised edition)Der pathologische Programmierer (revised edition)
Der pathologische Programmierer (revised edition)
Jens Himmelreich
 
Lean Startup
Lean StartupLean Startup
Lean Startup
Jens Himmelreich
 
Agilität und Mikropolitik
Agilität und MikropolitikAgilität und Mikropolitik
Agilität und Mikropolitik
Jens Himmelreich
 
Fremde Domänen verstehen - eine philosophische Randnotiz
Fremde Domänen verstehen - eine philosophische RandnotizFremde Domänen verstehen - eine philosophische Randnotiz
Fremde Domänen verstehen - eine philosophische Randnotiz
Jens Himmelreich
 
Die Dinge richtig tun - die richtigen Dinge tun
Die Dinge richtig tun - die richtigen Dinge tunDie Dinge richtig tun - die richtigen Dinge tun
Die Dinge richtig tun - die richtigen Dinge tun
Jens Himmelreich
 
Das agile Ich
Das agile IchDas agile Ich
Das agile Ich
Jens Himmelreich
 

More from Jens Himmelreich (11)

Auto, Maschine, Buch
Auto, Maschine, BuchAuto, Maschine, Buch
Auto, Maschine, Buch
 
kundenorientierte vertikalisierung
kundenorientierte vertikalisierungkundenorientierte vertikalisierung
kundenorientierte vertikalisierung
 
Software-Hygiene
Software-HygieneSoftware-Hygiene
Software-Hygiene
 
Schnittmuster
SchnittmusterSchnittmuster
Schnittmuster
 
Der pathologische Programmierer (revised edition)
Der pathologische Programmierer (revised edition)Der pathologische Programmierer (revised edition)
Der pathologische Programmierer (revised edition)
 
Lean Startup
Lean StartupLean Startup
Lean Startup
 
Das Leben als Projekt
Das Leben als ProjektDas Leben als Projekt
Das Leben als Projekt
 
Agilität und Mikropolitik
Agilität und MikropolitikAgilität und Mikropolitik
Agilität und Mikropolitik
 
Fremde Domänen verstehen - eine philosophische Randnotiz
Fremde Domänen verstehen - eine philosophische RandnotizFremde Domänen verstehen - eine philosophische Randnotiz
Fremde Domänen verstehen - eine philosophische Randnotiz
 
Die Dinge richtig tun - die richtigen Dinge tun
Die Dinge richtig tun - die richtigen Dinge tunDie Dinge richtig tun - die richtigen Dinge tun
Die Dinge richtig tun - die richtigen Dinge tun
 
Das agile Ich
Das agile IchDas agile Ich
Das agile Ich
 

Recently uploaded

Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Things to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUUThings to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUU
FODUU
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
David Brossard
 

Recently uploaded (20)

Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Things to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUUThings to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUU
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
 

Muster in Webcontrollern

  • 10.
  • 13. CONTROLLER public 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
  • 18.
  • 20. 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
  • 23. CLEAN
  • 25. 1
  • 26. 2
  • 27. 3
  • 28. 4
  • 30. 6
  • 31. 7
  • 33. CLEAN
  • 36. @Override 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); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 37. @Override 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 = 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);
  • 38. @Override 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 = 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 = modelBuilde Basket basket = modelBuilder. Customer customer = modelBuil PaymentRule paymentRule = pay
  • 39. @Override 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); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 40. @Override 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); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 41. @Override 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); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc); (session, basket, modelBuilder)
  • 42. 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); } // ... }
  • 43. 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); } // ... }
  • 44. 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)
  • 45. @Override 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); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 46. @Override 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); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 47. @Override protected 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);
  • 48. @Override protected 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);
  • 49. @Override protected 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);
  • 51. @Override protected 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);
  • 52. @Override protected 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);
  • 53. @Override protected 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();
  • 55. @Override protected 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);
  • 56. @Override protected 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);
  • 57. @Override protected 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)
  • 58. 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; }
  • 59. 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; }
  • 60. 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
  • 61. 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; }
  • 62. 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)
  • 63. 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();
  • 64. 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();
  • 65. 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());
  • 66. 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);
  • 67. 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();
  • 68. ER GO
  • 77. EN DE
  • 78. 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