0

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

我有几个选择:

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

我不是在想什么吗?什么是正确的模式?

4

2 回答 2

1

听起来您正在寻找关注点(在 Rails4 中或在 Rails3 中进行一些配置)或服务对象。

这篇文章有更多的想法。我还建议 Ryan Bates 出色的 Railscasts Pro 第 398 集。

于 2013-06-28T10:12:20.203 回答
0

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

或者您可以通过在 lib 目录中添加代码来简单地“模拟”gem。

基本思想是暗示更少的“耦合”。您intercom的模块/宝石不应该关心您的User模型。

于 2013-06-28T05:55:44.453 回答