铁路架构/最佳实践问题

时间:2011-06-12 09:17:41

标签: ruby-on-rails architecture

我一直在集思广益,这是实现这一目标的最佳方式,并认为我应该向社区寻求一些想法/清晰度。

基本上来自单个支付控制器,我希望能够处理用户可能选择的各种支付选项。例如,我的控制器被:payment_option => paypal的帖子请求命中。我想传递逻辑来处理paypal特定的操作,然后将一个url(到pay)重定向到控制器。

我正在做params[:payment_option].constantize初始化Paypal类,但我遇到的问题是无法访问paypal所需的各种数据(即当前用户信息,请求IP地址,cookie数据,网址)助手等。)

然后我想也许我可以有一个paypal模块,但如何以编程方式包含正确的支付模块?而且我似乎错误地使用了模块概念,因为我会将模块用于特定的逻辑,而不是共享逻辑。

因此,如果用户改为选择google checkout,则无论付款方式如何,控制器都应该只需要通用说明

采取参数[:payment_option] 获取payment_option_url 收到payment_option_response

关于做这样的事情的好方法的任何想法?我过去遇到过类似的情况,但从未确定这是最好的路线。

1 个答案:

答案 0 :(得分:2)

class Payment                                                                
  def self.handle                                                            
    raise 'must impliment in subclass'                                       
  end                                                                        
end                                                                          

class PaypalPayment < Payment                                                
end                                                                          

class GooglePayment < Payment                                                
end                                                                          

class PaymentController < ApplicationController                              
  def show_me_the_money                                                      
    case params[:payment_option]                                             
    when 'paypal': url = PaypalPayment.handle params                         
    when 'google': url = GooglePayment.handle params                         
    end      

    redirect_to url                                                                   
  end                                                                                 
end