2013-06-28 34 views
0

我在app/models/user.rb中有一個用戶模型。我的用戶類有很多與外部服務Intercom有關的操作。現在我有一堆方法,如register_intercom_user,update_intercom_data,ping_intercom等,所有這些都與用戶對象有關。重構模型的部分

我有幾個選擇:

  1. 創建這些方法的混入(最簡單的選項)。但後來我污染了我的用戶名空間。
  2. 使用def new(user)在我的lib/dir中創建一個intercom.rb文件。這是一種痛苦,因爲它離User類很遠,並不意味着耦合。
  3. 創建一個應用程序/模型/用戶/ intercom.rb與class User::Intercom; def new(user)...。看起來更正確,因爲它顯示了與用戶模型的耦合,但我還沒有在其他項目中看到過這種模式。

我是不是在想什麼?什麼是正確的模式呢?

回答

1

這聽起來像你正在尋找關注(在Rails4中或在Rails3中的一個小配置)或服務對象。

This article有更多的想法。我還建議Ryan Bates的優秀的Railscasts Pro第398集。

0

在處理外部服務時,通常會有某種類型的寶石。你可以做同樣的事情,建立一個處理你的方法的小寶石,並將它作爲本地寶石包含在你的gem文件中。

或者你可以簡單地通過在你的lib目錄中添加代碼來「模擬」一個gem。

其基本思想是暗示較少的「耦合」。你intercom模塊/寶石不應該在乎你的User模型。

+0

我的對講機實際上確實需要訪問我的用戶對象的許多屬性 - 有耦合。在這種情況下,我覺得寶石是不合適的。 – Larry

+0

你不能從用戶模型中提取你需要的東西嗎?也許有一天你會想要另一個模型來處理你的對講外部服務。 –