Skip to content
cavalle edited this page Jan 7, 2013 · 28 revisions

Taxonomies

Who calls the service object?

  • The controller (service-layer?)
  • The AR model

What represents the service object?

  • A role
  • An external interface
  • A use case

Version #8

class OrdersController < ActionController::Base
  def close
    #retrieval
    payment_handler = Payment.for(params[:method], params[:card])
    process = OrderProcess.new(order, payment_handler)
    process.close
    #rendering
  end
end
class Payment
  def self.for(method, card_details=nil)
    if method == "card"
      CardPayment.new(card_details)
    else
      new
    end
  end

  def handle_payment
    #default payment handling code
  end
end
class CardPayment
  #...

  def handle_payment
    ExternalPaymentService.new.charge(@card_details)
  end
end
class OrderProcess
  #...

  def close
    @payment_handler.handle_payment
    Delivery.create! :status => :pending, :order => @order
    @order.close!
  end
end

```ruby` class Order < ActiveRecord::Base #...

def close! self.closed = true self.save! end end





Clone this wiki locally