コントローラのアクションがそれほど多くない場合や、こまかなバリデーションの分離を必要としない場合は、とくに問題がない気がしますが、ユーザ関連のような、こまかなアクション、こまかなバリデーションの分離を実装しないといけない場合、User モデル、User コントローラ、User アクションビューという形で実装すると、モデル、コントローラのコードが膨れ上がり、複雑にもなり、かつ再利用もしにくくなります。
Yii にはそれをカバーするためにシナリオというものがあって、特定のタイミングで特定のバリデーションを使用できるようになっていますが、それでも、モデル、コントローラのさまざまな負担を完全に解消することは難しく、また、アクション単位でファイルを分離することで再利用性は高められ、コントローラの負担は軽減されますが、バリデーションの問題などが残ってしまいます。
そこでモジュールを使ってそれらを実装する、という考えになります。簡単に利点をあげていくと、以下のような感じです。
- 簡単に再利用ができる
- 管理しやすく、カスタマイズも容易
- アクション単位で MVC が作れる
- よって、シナリオをこまかく指定しなくてもよくなる
- ビュー部分は新しく作る必要がなく、カスタマイズするだけ (再利用時)
重要な部分は アクション単位で MVC が作れる ことでしょう。以下のディレクトリ構造を見れば、雰囲気がわかるかと思います。 user module の方は、ひとつのアクションに対して MVC を作る形なので、モデル、コントローラともにコードが膨れ上がることもなく、バリデーションも特定のアクションのみのものを記述するだけになります。
Yii の柔軟な設計を考えると、モジュールにしなくてもアクション単位で MVC を作ることが不可能ではないように思えますが、モジュールというパッケージにすることで、より管理がしやすくなるのも利点かなと思います。
逆に欠点としては、URL に気をつけないといけないのと、ファイル数が増えることです。 URL に関しては、モジュールを使う場合、次のようになるため
http://example.com/index.php?r=module/controller/action
コントローラのデフォルトアクションの指定や、ビューのレンダリング、URL の作成などに工夫が必要になります。
0 件のコメント:
コメントを投稿