重构模型的各个部分

时间:2013-06-28 05:50:01

标签: ruby-on-rails

我在app / models / user.rb中有一个用户模型。我的User类有很多与外部服务Intercom相关的操作。现在我有一堆方法,如register_intercom_userupdate_intercom_dataping_intercom等。所有这些都与User对象有关。

我有几个选择:

  1. 使用这些方法创建mixin(最简单的选项)。但后来我污染了我的用户命名空间。
  2. 使用def new(user)在我的lib / dir中创建一个intercom.rb文件。这很痛苦,因为它远离User类,并不意味着耦合。
  3. 使用class User::Intercom; def new(user)...创建app / models / user / intercom.rb。看起来更正确,因为它显示了与User模型的耦合,但我还没有在其他项目中看到过这种模式。
  4. 我没想到什么?什么是正确的模式?

2 个答案:

答案 0 :(得分:1)

听起来你正在寻找忧虑(在Rails4中或在Rails3中使用一些配置)或服务对象。

This article有更多想法。我还建议Ryan Bates出色的Railscasts Pro第398集。

答案 1 :(得分:0)

在处理外部服务时,通常会有某种形式的宝石。你可以做同样的事情,构建一个处理你的方法的小宝石,并将它作为本地gem包含在你的gemfile中。

或者你可以简单地模拟"通过在lib目录中添加代码来创建一个gem。

基本思想是暗示较少的"耦合"。您intercom module / gem不应该关心您的User模型。