我在app / models / user.rb中有一个用户模型。我的User类有很多与外部服务Intercom相关的操作。现在我有一堆方法,如register_intercom_user
,update_intercom_data
,ping_intercom
等。所有这些都与User对象有关。
我有几个选择:
def new(user)
在我的lib / dir中创建一个intercom.rb文件。这很痛苦,因为它远离User类,并不意味着耦合。class User::Intercom; def new(user)...
创建app / models / user / intercom.rb。看起来更正确,因为它显示了与User模型的耦合,但我还没有在其他项目中看到过这种模式。我没想到什么?什么是正确的模式?
答案 0 :(得分:1)
听起来你正在寻找忧虑(在Rails4中或在Rails3中使用一些配置)或服务对象。
This article有更多想法。我还建议Ryan Bates出色的Railscasts Pro第398集。
答案 1 :(得分:0)
在处理外部服务时,通常会有某种形式的宝石。你可以做同样的事情,构建一个处理你的方法的小宝石,并将它作为本地gem包含在你的gemfile中。
或者你可以简单地模拟"通过在lib目录中添加代码来创建一个gem。
基本思想是暗示较少的"耦合"。您intercom
module / gem不应该关心您的User
模型。