0

app/models/user.rb に User モデルがあります。私の User クラスには、外部サービス Intercom に関連する多くの操作があります。現在register_intercom_userupdate_intercom_dataping_intercom、 などのメソッドがたくさんあります。これらはすべて User オブジェクトに関連しています。

いくつかのオプションがあります:

  1. これらの方法で mixin を作成します (最も簡単なオプション)。しかし、その後、ユーザーの名前空間を汚染しています。
  2. lib/dir に intercom.rb ファイルを作成し、def new(user). ただし、これは User クラスから遠く離れており、結合を意味しないため、面倒です。
  3. で app/models/user/intercom.rb を作成しますclass User::Intercom; def new(user)...。User モデルとの結合を示しているため、より正しいように見えますが、他のプロジェクトでこのパターンを見たことがありません。

私は何かを考えていませんか?これに適したパターンは何ですか?

4

2 に答える 2

0

外部サービスを扱う場合、通常、そのためのある種の gem があります。同じことを行うか、メソッドを処理する小さな gem を作成し、それをローカル gem として gemfile に含めることができます。

または、lib ディレクトリにコードを追加して、単純に gem を「シミュレート」することもできます。

基本的な考え方は、「カップリング」を少なくすることです。あなたのモジュール/宝石はあなたのモデルintercomを気にするべきではありません。User

于 2013-06-28T05:55:44.453 に答える