質問: お世話になっております 日記(daily)URLの下に、カテゴリを作りたいと思います。 ex:アニメ、マンガ、小説 これらのカテゴリのViewは全て共通しています。 違いはDBから取ってくるデータが異なります。 また、カテゴリのView以下では前月・当月・来月と 月をまたげるようにしています。 日記 | | | | アニメ マンガ 小説 前月/当月/来月 前月/当月/来月 前月/当月/来月 URL: 日記/カテゴリ/月 という画面遷移図になっています。 カテゴリ毎にコントローラを作ったほうがいいのか、 日記コントローラでカテゴリ別のアクションを作ったほうがいいのか どちらがいいか悩んでいます ご教授をよろしくお願いいたします。
回答: 自分は素人なので、あまり断定的な事は言えませんが・・・ > > 違いはDBから取ってくるデータ > > > という事であれば、異なったアプローチの方がメンテナンスし易いアプリケーションになるのではないでしょうか。 ### 1. コントローラについて **コントローラ**は文字通りの**中央司令塔**なので、一つであるべきです。 コントローラの役割は、受け取った**リクエスト**(=URL)に応じて、後段の**モデル**や**ビュー**の挙動をコントロールする事ですが、そのコントローラが複数有るとすれば、それをリクエストに応じて呼び分けるのは誰なのでしょうか? その様な構成にすればコントローラ本来の役割を放棄し他に任せているだけで、イタズラに複雑化させるだけだと思います。 コントローラがすべき事は、ただ単にリクエストの**パターン**から**カテゴリ**その他の情報を抽出し、パラメータ化して後段の処理を担当するモジュールへ受け渡すだけです。 ### 2. カテゴリ別のアクションについて もしカテゴリ別のアクションをコントローラ内に**実装**しなければならないとすると、**カテゴリが増える度に**コントローラを修正しテストしてリリースしなければなりません! そんなの実際的では無いですよね? ### 3. おすすめの構成 どんな場合にも適しているとは言えませんが・・・ 比較的に単純な構成のサイトならば、モジュール自体は極力シンプルで分岐の少ない構造とした方が、実装もテストもメンテナンスも楽です。 そして、リクエストとカテゴリ等のパラメータの対応関係(マッピング情報)は、極力ネーミングルールに基づく**規約**か、規約だけで対応し難ければプロパティファイル化された**対応表**で表すようにするのが良いです。 テーブルの設計をキチンと実施すれば、ほんの数個のパラメータだけで必要な情報にアクセス出来るはずなので、複雑な**ロジック**を組む必要性はなく、カテゴリの追加・変更にも、プロパティの数行を差し替えるだけで対応出来るようになります。 見た目やちょっとした挙動の変化を付けたい場合にも、CSSやJavaScript等を適切に設計すれば、1、2個のパラメータで切り替え可能のはずです。 つまり、最終的に制作者の好みによるところが大きいとは言え、上手く設計すればかなりシンプルな構造で僅かなパラメータの差し替えにより、カテゴリの追加・変更に対応可能に出来ると思います。