0

名前に基づいて動物の有名人を検索する Rails プロジェクトを想像してみてください。この Rails アプリは、実際のルックアップを行う外部サービスによって支えられています。サービスは、キーに基づいて結果を返します。たとえば、この外部 API に [GET] /animal?name=benji のようなリクエストを行うと、{"type":"dog", "legs":"4", "tail-length" のようなものが返されます":"ショート", "襟":"青"}. ただし、動物のエンドポイントに ...?name=flipper を渡すと、{"type":"dolphin", "color":"gray", "food":"fish"} が返されます。(データは実際の JSON または XML で返されます。要点を伝えるために、ここでは疑似コードを使用しているだけです。)

私の最初の質問はこれです...リターンコールの属性が渡されたデータに基づいて変化することを考えると、応答を(より適切な用語がないため)「モデル」オブジェクトにアンマーシャリングするときに、実装するのは理にかなっていますか適切なクラスのオブジェクトを作成するための何らかのタイプのファクトリ パターン (Russ Olsen 著、Ruby のデザイン パターン、第 13 章) 理にかなっている他のアプローチはありますか?

私の次の質問はこれです。Web ページにすべての動物のリストを表示したいとしましょう (ERB テンプレートを使用)。 ) 次に、各リスト項目のレンダリングを適切なテンプレートに委任できるケースをメイン リスト ビューに配置します。

例えば:

list.html.erb...

  <ul>
  <% for animal in @animals.each %>
     <li>   
        <% if animal.type == 'dog' %>
          <%= render :partial => 'dog', :locals => {:animal => animal} %>
        <% elsif item.type == 'dolphin' %>
          <%= render :partial => 'dolphin', :locals => {:animal => animal} %>
        <% else %>
          <%= render :partial => 'generic_animal', :locals => {:animal => animal} %>
        <% end %>
      </li>          
  <% end %>
  </ul>

(ここで animal.type=='dog' は意図的なものです。シンボル (:dog) は使用していません。API から返されるデータは文字列値であり、animal.type 属性の入力に使用されるためです。悪い、知っている。)

私が取り組んでいるプロジェクトは、現在このアプローチを使用しています。(明らかに、要素/ドメインを変更しました。)これが有効なアプローチであるかどうか、および/または他の人が同様の問題に対処し、どのように対処したかを疑問に思っています。

ありがとう!

4

1 に答える 1