2

だから私は Rails アプリに取り組んで全体の感覚を掴んでいます。Product標準の ActiveRecord モデルであるモデルがあります。ただし、Amazon ECS から追加の製品情報も取得したいと考えています。したがって、私の完全なモデルは、その情報の一部をデータベースから取得し、一部を Web サービスから取得します。私の質問は、私はすべきですか:

  1. 2 つのモデルを Product と ProductAWS にし、それらをコントローラー レベルで結び付けます。

  2. Product ActiveRecord モデルに、すべての AWS 処理を行う ProductAWS オブジェクトが含まれていますか?

  3. すべての AWS 機能を製品モデルに追加するだけです。

  4. ???

4

4 に答える 4

0

@メンノ

AWS-attributesクラスにActiveResourceを使用するのはどうですか?

于 2008-09-16T08:55:11.717 に答える
0

2 つの完全に異なるソース (ActiveRecord とインターネット) からデータを取得する場合、これらを別々のモデルとして保持することには多くの利点があります。上記の投稿者が書いたように、Product has_one (または has_many) :aws_item.

于 2008-09-16T22:33:32.030 に答える
0

ほとんどのものと同様に、状況によります。あなたのアイデアにはそれぞれメリットがあります。私だったら、次のように始めます。

  class Product < ActiveRecord::Base
     has_one :aws_item
  end 
  class AWSItem 
     belongs_to :product
  end

自問したい主な質問は次のとおりです。

AWS ECS アイテムのみを提供する予定ですか、それとも他の製品を提供する予定ですか? Amazon とは何の関係もない、ASIN を気にしないなどの製品がある場合は、has_one が適している可能性があります。または、さらに良いことに、:vendable インターフェースとのポリモーフィックな関係により、後でさまざまな拡張タイプをプラグインできます。

違うのは行動だけですか、それともデータも大きく変わるのでしょうか? あなたが考慮したいかもしれないので:

class Product < ActiveRecord::Base
end 
class AWSItem < Product
  def do_amazon_stuff
    ... 
  end
end

Amazon ECS が利用できない場合、システムをどのように実行したいですか? 例外をスローする必要がありますか?それとも、カタログのローカルにキャッシュされたバージョンに依存する必要がありますか?

class Product < ActiveRecord::Base

end

class ItemFetcher < BackgrounDRb::Rails
   def do_work
      # .... Make a cached copy of your ECS catalog here. 
      # Copy the Amazon stuff into your local model
   end
end

これらの質問をゆっくりと見ていくと、答えがより明確になります。そうでない場合は、プロトタイプの作成を開始します。幸運を!

于 2008-09-16T19:43:21.207 に答える
0

composed_ofこの関係は ActiveRecord で使用できます。AWS で管理するすべての属性を含む通常のクラスを作成し、Product-class がこのクラスの composer_of であることを指定します。ActiveRecord は、このクラスとの間でマッピングされた属性の委譲を処理します。

composer_ofのドキュメントを参照してください

于 2008-09-16T08:49:03.633 に答える