我在 Rails 中创建了一个服务对象,作为我们的应用程序和 API 之间的接口。
我从http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/得到了这个想法
这是一个小例子:
class PackagesService
def self.get_package(package_id)
raise ArgumentError.new("package_id can't be nil") if package_id.blank?
package = API::get "/packages/#{package_id}"
package = JSON.parse package,
:symbolize_names => true unless package.blank?
end
end
是否有任何好的模式来处理服务对象的验证和/或抛出错误?
对于验证:
- 我必须检查所有输入是否为 nil 或错误类型。有什么方法可以轻松验证吗?也许是铁路延伸?
对于错误:
- 我可以捕获所有 API 错误,然后安全地返回 nil。但是使用服务对象的程序员可能不知道 nil 的含义。
- 我可以捕获 API 错误并引发另一个错误,这意味着在所有函数中都要付出额外的努力
- 第三个选项是保持原样,让程序员处理来自 API 的所有错误。
如果您知道任何好的模式或者您是否有更好的想法来接口 API,请告诉我。