2

そのため、特定のコードに対して個別のコントローラーを使用するかどうかを決定する必要がある状況にあります。サイトの他の部分のハブのように機能するホームページがあります。このページには、すべてのユーザーがアクセスできます(ログインしている場合とログインしていない場合)。home私は別のコントローラーとして、と呼ばれるアクションを持つことを考えていましたindex。このような状況を考えて、この面でルールやガイドラインがあるのではないかと思い始めました。

私の認識では、コードがエンティティを中心に展開する場合は、分離が必要です。(RESTガイドラインと同様)エンティティが名詞の場合は、コントローラーである必要があります。エンティティが動詞である場合、それはおそらくアクションであり、動詞が参照する名詞の名前と同じ名前のコントローラーに存在する必要があります。一部の同僚は、これは1つのアクションであるため、既存のコントローラーに常駐し、という名前を付ける必要があると提案しましhomeた。私は強く反対しましたが、これを裏付ける信頼できる情報源を見つけることができませんでした。

あなたの考えを知りたいです。

4

3 に答える 3

1

この場合、私はあなたの同僚に同意しなければなりません。

あなたが言うように、REST はリソースを扱うときにとるべき優れたアプローチです。これにより、特に Web サービスを作成する目的で、一貫したインターフェイスを作成できます。

ただし、REST は実際には Web ブラウザーの設定にうまく対応していません。たとえば、リソースの場合でも、/edit および /new アクションは、関連する RESTful アクションを指す HTML フォームを返す単なる GET 要求であることに気付くでしょう。「編集」と「新規」は RESTy ではありません。

同様に、ホームページは一般に、RESTful インターフェイスには適していない、さまざまなデータのユーザー フレンドリーな融合です。したがって、追加のコントローラーを 1 つのアクションに貼り付けるか、既存のコントローラーの「リスト」アクションをホームページとして使用するかのいずれかです。

于 2009-05-12T10:12:54.913 に答える
0

簡単な (そして役に立たない) 答えは、どちらの方法でも問題なく動作するということです。

誰もが一度はこの決定に出くわすと思います.あなたが下す決定は、ウェブサイトの将来の可能性に依存します...つまり、時期尚早の最適化になりがちです...しかし、それは常に問題です.

おそらくご想像のとおり、「home」はある意味では名詞であると同時に動詞でもあるため、何をすべきかを理解するのに苦労しているのです。

答えは、ウェブサイトの構造の解釈と、どれだけの時間を利用できるかの組み合わせによって異なります...

これに取り組む時間がほとんどない場合...「ホーム」アクションを別のコントローラーに詰め込むことが、多くの場合、適切なオプションと見なされます。それは機能し、他の (おそらくより生産的な) タスクに移ることができます。

しかし、時には一歩下がって、自分がしていることと、それが「より良い」ことができるかどうかについて考えるのが良いことに同意します...この場合、「より良い」を定義するのは難しいですが、新しいコントローラーのホーム アクションは測定可能なほど高速になります...そして、それがコントローラー内の唯一のアクションである場合...構造的に、既存のコントローラーに追加するだけの方が良いかどうかは議論の余地があります...

そこで、ほとんどが哲学的な議論から始めます... 言い換えれば、他の答えよりも「より正しい」答えはありません - それは好みと状況の問題です. この場合、議論は構造をより RESTful にすることにかかっています。

RESTful アーキテクチャに忠実であるためには、実際にアクションを独自のコントローラーに移動することになりますが、最初にエンティティが何であるかを特定する必要があります。「ホーム」ページは、特定の db エンティティとして容易に識別できないことがよくあります...それはより多くの場合、ポータル ページです。

エンティティを選択できる場合もあります。たとえば、オンライン ショップには、実際には "products#index" のバリエーションであるホームページがあったり、"home" ページが UserAccount#show ページである場合もありますが、多くの場合、あなたのホームページは単純ではなく、複数のエンティティからの情報を組み合わせます...したがって、「正しい」アーキテクチャを決定するのが難しいのはなぜですか。

特定のエンティティを識別できない場合は、アクションを特定のコントローラーに移動するかどうかについて有効な議論があります。

ただし、サイトのアーキテクチャを中心とした新しい「エンティティ」をいつでも作成できます。これは、サイトのエンティティ固有ではない他のページ (T&C や「会社について」ページなど) を考え出す場合に特に可能性があります。

通常のフォールバックは、Active Recordモデルにリンクされていない「PageController」(または類似の名前) ですが、よりあいまいなエンティティ (この場合は、Web サイトのユーザーが認識できる「ページ」) にリンクされています (例: 「ホームページ」および「T&C ページ」および「概要ページ」)。各アクションは特定のページに対するものです...

したがって、これがあなたのシステムのアーキテクチャーに対するあなたの見解によりよく適合するかどうか、そして努力する価値があるかどうかはあなた次第です... しかし、それは議論に対する私の見解です. :)

于 2010-09-15T10:40:43.967 に答える
0

問題はこのフレーズから始まります

エンティティが動詞の場合

RESTful アーキテクチャーを作成しようとしている場合、エンティティーを動詞にすることはできません。HTTP を使用している場合に許可される唯一の動詞は、GET、PUT、POST、DELETE、HEAD、OPTIONS です。すべてのエンティティは何らかの名詞にマップする必要があり、そのエンティティを取得しようとしている場合は、動詞 GET を使用する必要があります。個人的には、それをコントローラーのメソッド Get() にマップしますが、Rails でそれができるかどうかはわかりません。

于 2009-05-12T14:48:49.557 に答える