2

私は画像ギャラリー Web アプリケーションに取り組んでいます。多くのアクセス ルートがあり、それらはすべて同じ方法でギャラリーをレンダリングする必要があります。唯一の違いは写真の順序です。

たとえば、次のようになります。

mysite.com/favorites -> shows all the pics ordered by number of favorites
mysite.com/views -> shows all the pics ordered by number of views
mysite.com/date -> shows all the pics ordered by date
mysite.com/votes -> shows all the pics ordered by votes

これらすべてのアクションは非常に似ているため、コントローラーでルートごとに 1 つのアクションを定義し、注文をパラメーターとして渡すことをお勧めしますか? または、このロジックはモデルで処理する必要がありますか?

4

1 に答える 1

2

アクションが非常に似ていてパラメーターが異なる場合、そのパラメーターを受け入れるアクションを1 つ持つことが理にかなっている可能性があります。最後はルールではなく、単なる好みです。

特定のケースでは、パラメーター付きの 1 つのルートを使用して、次のように処理できます。

Route::get('{orderBy}', 'GalleryController@showPics')

次に、コントローラーには次のようなものがあります。

class GalleryController extends BaseController
{
    public function showPics($orderBy)
    {
        $pics = $this->service->getPics($orderBy);
        return View::make('gallery')->with('pics', $pics);
    }
}

問題なく動作しますが、考慮すべき点がいくつかあります。

  1. showFavoritesshowMostViewedshowRecentsshowMostVotedなど、特殊なアクションを持つコントローラーを使用する方がセマンティックです。
  2. ビューについて考えてみてください。異なるビュー、異なるデータ セットを持つ異なるネストされた子を配信する予定の場合は、ケースごとにアクションを用意することをお勧めします。
  3. コードの読みやすさ。複数の if ステートメント、複数の return ステートメントを含むコントローラーを想像してみてください。それらはすべて、複数の catch 句を持つ大きな try-catch ブロックにラップされています...スパゲッティ コードを使用して次のプログラマーへの頭の迷走を回避できる場合は、それを検討してください。
于 2013-08-12T20:16:00.607 に答える