1

これは主に設計パターンの問題です。複数のソースから作成するためのデータを取得する 1 つのタイプのモデルがあります。たとえば、あるレコードは API から作成され、別のレコードは Nokogiri を使用したスクリーン スクレイピングによって作成されます。

私の問題は、これらのさまざまなデータ ソースをどのように抽象化するかということです。現在、モデルの属性を設定するために使用する同じハッシュを返す lib クラスを構築しています。しかし、これはSTIを使用するケースではないのではないかと思います. または、これを行う他の方法がある場合、私は考えていません。

4

1 に答える 1

1

設計上の決定は、どの属性を保存する必要があるかに大きく依存すると思います。あなたの説明から、複数のデータ ソースを持つモデルがあるように思えますが、ソースに関係なく同じ属性を格納します。その場合、STI はやり過ぎのように思えます。テーブルから行を取得するとき、ソースが API であるかスクリーン スクレーパーであるかは重要ですか? そうでない場合は、データ ソースごとに個別のメソッドを定義し、コントローラーで適切なメソッドを使用することができます。

@instance = MyModel.new(:datasource=>"API")`

本当に必要でない限り、継承 (またはモジュールからのコードの混入) について心配する必要はありません。落とし穴がいくつかあります。たとえば、STI は一部の gem/plugins では完全にサポートされていません。

于 2010-08-16T03:13:23.010 に答える