Design Pattern: Facade and 1-Click Ordering

Design Pattern: Facade and 1-Click Ordering

Design Patterns in life and Ruby — gain an intuitive understanding of OO design patterns by linking them with real-life examples.

 

The Facade Pattern is about making complicated things simple.

The Facade Pattern:

 

- provides a unified interface to a set of interfaces in a subsystem.

 

- defines a higher-level interface that makes the subsystem easier to use.

 

You will know exactly what the definition means after we do some shopping on Amazon.

 

Shopping on Amazon is similar to shopping anywhere else online.

You first add an item to your shopping cart.

You then proceed to the checkout process, which has four steps:

  1. Enter Shipping Address
  2. Enter Payment Method
  3. Review Items and Shipping
  4. Place Order

Here is what the code will look like:

class CheckoutProcess
  attr_reader :order
  
  def initialize(order)
    @order = order
  end
  
  def set_shipping_address(address)
    order.shipping_address = address
  end
  
  def set_payment_method(payment_method)
    order.payment_method = payment_method
  end
  
  def review_order
    puts "Order contains: #{order.items}"
    puts "Shipping Address is #{order.shipping_address}"
    puts "Payment Method is #{order.payment_method}"
  end
  
  def place_order
    order.confirm
  end
end

And the checkout process will look like:

 

The checkout experience is not ideal for people who shop on Amazon a lot. They have to go through all four steps each time they buy something.

 

1-Click Ordering

Luckily, Amazon has a 1-Click Ordering feature that shortens the entire checkout process from four steps to 1-Click.

One single click will place the will place the order with your default shipping address and default payment method.

Since we already have the CheckoutProcess class and we want to keep the regular checkout process as an option, we can reuse methods in CheckoutProcess for the 1-Click Ordering:

class OneClickCheckout
  attr_reader :checkout_process, :default_address, :default_payment
  
  def initialize(order, default_address, default_payment)
    @checkout_process = CheckoutProcess.new(order)
    @default_address = default_address
    @default_payment = default_payment
  end
  
  def click
    @checkout_process.set_shipping_address(default_address)
    @checkout_process.set_payment_method(default_payment)
    @checkout_process.place_order
  end
end

With OneClickCheckout, placing an order is only a matter of a click.

From a user perspective, all I need to do is click the “Buy now with 1-Click” button. And the 1-Click will handle all the necessary steps to place an order for me.

 

 

Facade in the light of 1-Click Ordering

The Facade Pattern

- provides a unified interface to a set of interfaces in a subsystem.

- Facade defines a higher-level interface that makes the subsystem easier to use.

 

In our 1-Click Ordering example,

  • the unified interface is the OneClickCheckout,
  • the set of interfaces includes set_shipping_address, set_payment_method, place_order,
  • the subsystem is `CheckoutProcess`

The higher-level interface, OneClickCheckout, makes ordering and checking out much easier: four steps turn into 1-Click.

 

Takeaways

The Facade Pattern:

 

- provides a unified interface to a set of interfaces in a subsystem.

 

- defines a higher-level interface that makes the subsystem easier to use.

Don't forget to subscribe so you won't miss the next post. ?

Enjoyed the article?

My best content on Software Design, Rails, and Career in Dev. Delivered weekly.

Unsubscribe at anytime. I'll never spam you. Powered by ConvertKit

 

Next time we will take a look at some movies.

 

 

Leave A Comment

Your email address will not be published. Required fields are marked *