我正在我的系统和外部网络服务之间进行集成。在我的系统中,我有一个Customer
模型。客户可以在借记中,但此信息(客户的财务状况(在我的数据库中不可用。它位于我正在集成的网络服务中。
我在此模型中创建了一个方法并将其命名为 is_in_debit?
。在方法实现中,我正在对 Web 服务进行 HTTP 调用。
class Customer < ActiveRecord::Base
...
def is_in_debit?
response = HTTP.get_response('https://...').body
response = JSON.parse(response)
response['status'] == 'active' ? false : true
end
end
但我怀疑该模型是否是进行HTTP调用的正确位置。从建筑的角度来看,它对吗?还是我应该改变我的方法?
不,您违反了 SRP 原则,在活动记录模型中,您应该只添加访问模型数据的方法。我建议创建一个新对象:
class CustomerService
def is_in_debit?(user)
// your http request here
end
end