SlideShare a Scribd company logo
1 of 78
Download to read offline
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 ArchitectureEric 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 v2rogerjhu1
 
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 PronkoMax 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 ValidationEyal Vardi
 
droidQuery: The Android port of jQuery
droidQuery: The Android port of jQuerydroidQuery: The Android port of jQuery
droidQuery: The Android port of jQueryPhDBrown
 
Taming forms with React
Taming forms with ReactTaming forms with React
Taming forms with ReactGreeceJS
 
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 stepsKaty 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 MongoDBMongoDB
 
Webit expo Standard Product
Webit expo Standard ProductWebit expo Standard Product
Webit expo Standard ProductBoji Ditcheva
 
Manipulating Magento - Mage Titans Italy 2018
Manipulating Magento - Mage Titans Italy 2018Manipulating Magento - Mage Titans Italy 2018
Manipulating Magento - Mage Titans Italy 2018Joke 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 iOSAlberto 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 SmartphonesMichael Galpin
 
Why SOLID matters - even for JavaScript
Why SOLID matters - even for JavaScriptWhy SOLID matters - even for JavaScript
Why SOLID matters - even for JavaScriptmartinlippert
 
Bare-knuckle web development
Bare-knuckle web developmentBare-knuckle web development
Bare-knuckle web developmentJohannes Brodwall
 

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 RoyceJens 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 eCommerceJens Himmelreich
 
интернет коммуникации в привлечении пациентов февраль 2010
интернет коммуникации в привлечении пациентов февраль 2010интернет коммуникации в привлечении пациентов февраль 2010
интернет коммуникации в привлечении пациентов февраль 2010Andrey Enkin
 
Portfolio alignment with business intentions
Portfolio alignment with business intentionsPortfolio alignment with business intentions
Portfolio alignment with business intentionsLuis Becerra
 
Der pathologische Programmierer
Der pathologische ProgrammiererDer pathologische Programmierer
Der pathologische ProgrammiererJens 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 ApplicationDan 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 PlatformsJonathan LeBlanc
 
Dependency injection - the right way
Dependency injection - the right wayDependency injection - the right way
Dependency injection - the right wayThibaud Desodt
 
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docxVersion1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docxtienboileau
 
Jasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-casJasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-casellentuck
 
MVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin WayMVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin WayZeyad 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 screeningschicagonewsonlineradio
 
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
 
(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 Sundaychicagonewsyesterday
 
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 playchicagonewsyesterday
 
Introduction to Zend Framework web services
Introduction to Zend Framework web servicesIntroduction to Zend Framework web services
Introduction to Zend Framework web servicesMichelangelo van Dam
 
Mastering Oracle ADF Bindings
Mastering Oracle ADF BindingsMastering Oracle ADF Bindings
Mastering Oracle ADF BindingsEuegene Fedorenko
 
Dont call me cache java version
Dont call me cache java versionDont call me cache java version
Dont call me cache java versionAvisi B.V.
 
Dont call me cache april 17
Dont call me cache april 17Dont call me cache april 17
Dont call me cache april 17Nati Shalom
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM patternNAVER Engineering
 
Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 formsEyal 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

kundenorientierte vertikalisierung
kundenorientierte vertikalisierungkundenorientierte vertikalisierung
kundenorientierte vertikalisierungJens Himmelreich
 
Der pathologische Programmierer (revised edition)
Der pathologische Programmierer (revised edition)Der pathologische Programmierer (revised edition)
Der pathologische Programmierer (revised edition)Jens Himmelreich
 
Agilität und Mikropolitik
Agilität und MikropolitikAgilität und Mikropolitik
Agilität und MikropolitikJens 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 RandnotizJens 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 tunJens 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

Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 

Recently uploaded (20)

Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

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