2

我想在按下按钮时通过调用外部 API 来更新我的数据。

我应该将逻辑放在控制器还是模型中?

或者更确切地说,哪些逻辑应该进入控制器,哪些应该进入模型。

基本上,我想检查是否在外部服务上创建了新记录 - 如果有新记录,那么我想拉出这些记录并在我这边创建一个新记录。

如果没有,那么就忽略它并继续前进。

解决这个问题的最佳方法是什么?

代码示例会有所帮助。

谢谢。

4

1 回答 1

4

我将在其下创建一个类或模块lib来处理所有核心 API 调用,并在模型中调用它。

所以我会做如下的事情。创建文件,如lib/tag_fetcher.rb

module TagFetcher

  def self.fetch_tags(...)
    # adress some API to fetch the tags
  end
end

然后在你的模型中写下类似的东西

def self.update_tags
  api_result = TagFetcher.fetch_tags
  # do your stuff here
end

(当然:您应该为您的案例考虑更相关的名称)

这样做的原因:

  • 可测试性:您可以相互隔离地测试获取和更新
  • 更简洁的代码:获取标签不是模型的职责(单一职责原则)
  • 如果 API 会以某种方式发生变化,或者您会使用相同的服务调用不同的 API,那么变化可能很小

HTH。

于 2013-02-22T15:02:37.320 回答