Ruby on Rails服务的最佳实践

时间:2018-06-14 11:26:34

标签: ruby-on-rails ruby ruby-on-rails-4

我正在编写一些移动otp验证服务,下面是我的服务类

require 'nexmo'
class NexmoServices
    def initialize api_key = nil, api_secret = nil, opts = {}
      api_key      = api_key || Rails.application.secrets.nexmo_api_key 
      api_secret   = api_secret || Rails.application.secrets.nexmo_secret_key 

      @nexmo_client = Nexmo::Client.new(
        api_key: api_key, 
        api_secret: api_secret,
        code_length: 6
        )
      @brand = 'CryptoShop'
    end


    def send_verification_code opts 
        @nexmo_client.verify.request(number: opts[:number], brand: @brand)
    end

    def check_verification_code opts
        @nexmo_client.verify.check(request_id: opts[:request_id], code: opts[:verification_code])
    end

    def cancel_verification_code opts
        @nexmo_client.verify.cancel(opts[:request_id])
    end
end

在控制器中我正在调用下面的服务方法

class NexmoController < ApplicationController

    def send_verification_code 
        response = NexmoServices.new.send_verification_code params[:nexmo]
        if response.status == '0'
          render json: response.request_id.to_json
        else
          render json: response.error_text.to_json
        end
    end


    def cancel_verification_code 
        response = NexmoServices.new.cancel_verification_code params[:nexmo]
        if response.status == '0'
          render json: response.to_json
        else
          render json: response.error_text.to_json
        end
    end
end 

我已经读过,通常在服务类中会有调用方法,控制器会调用它。服务方法调用将处理其余的事情。

如果您看到我的控制器(NexmoService.new),我的情况是为所有方法实例化服务对象。

是正确的???我想知道在这种情况下必须遵循的最佳做法。

谢谢, 阿吉特

0 个答案:

没有答案