我正在尝试实现一个库,该库提供了一种统一的方式来与服务器进行通信,该服务器将API调用从版本更改为版本。我计划以这种方式实施它:
connect.rb:
class Connect
def self.getConn(params)
case params[:version]
when '4.0' then return Connect4.new(params)
when '5.0' then return Connect5.new(params)
else 'Version not supported.'
end
end
end
class Connect4
def initialize(params)
# Code for v4.
end
end
class Connect5
def initialize(params)
# Code for v5.
end
end
test.rb:
require 'connect'
conn = Connect.getConn(:version => '4.0')
puts conn
我认为它会起作用,但我仍然是红宝石的新手,可能会有一些我不考虑的问题。有没有最好的做法来处理这种“挑战”?
答案 0 :(得分:1)
我认为你的方法没有任何问题,它肯定能奏效。另一方面,如果您的API有多个入口点,那么将版本传递给它们中的每一个都会感觉有点难看。你可以通过一些全局设置来解决它但是不要去那里......
Twitter's Cassandra gem有一个有趣的方法,而不是传递版本号,你需要一个不同的子库(docs):
require 'cassandra' # default version
require 'cassandra/1.0' # 1.0 version
这与Bundler一起使用时特别有用,因为您可以选择像这样的版本
gem "cassandra", require: "cassandra/1.0"
您已完成整个申请。