コントローラのアクションがそれほど多くない場合や、こまかなバリデーションの分離を必要としない場合は、とくに問題がない気がしますが、ユーザ関連のような、こまかなアクション、こまかなバリデーションの分離を実装しないといけない場合、User モデル、User コントローラ、User アクションビューという形で実装すると、モデル、コントローラのコードが膨れ上がり、複雑にもなり、かつ再利用もしにくくなります。
Yii にはそれをカバーするためにシナリオというものがあって、特定のタイミングで特定のバリデーションを使用できるようになっていますが、それでも、モデル、コントローラのさまざまな負担を完全に解消することは難しく、また、アクション単位でファイルを分離することで再利用性は高められ、コントローラの負担は軽減されますが、バリデーションの問題などが残ってしまいます。
そこでモジュールを使ってそれらを実装する、という考えになります。簡単に利点をあげていくと、以下のような感じです。
- 簡単に再利用ができる
- 管理しやすく、カスタマイズも容易
- アクション単位で MVC が作れる
- よって、シナリオをこまかく指定しなくてもよくなる
- ビュー部分は新しく作る必要がなく、カスタマイズするだけ (再利用時)
重要な部分は アクション単位で MVC が作れる ことでしょう。以下のディレクトリ構造を見れば、雰囲気がわかるかと思います。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* user MVC | |
-----------------------------------------------------------*/ | |
models/ | |
User.php | |
... | |
controllers/ | |
UserController.php | |
... | |
views/ | |
user/ | |
login.php | |
register.php | |
recovery.php | |
unregister.php | |
... | |
... | |
/* user module | |
-----------------------------------------------------------*/ | |
modules/ | |
... | |
user/ | |
models/ | |
Login.php | |
Register.php | |
Recovery.php | |
... | |
controllers/ | |
LoginController.php | |
Register.php | |
RecoveryController.php | |
UnregisterController.php | |
... | |
views/ | |
login.php | |
register.php | |
recovery.php | |
unregister.php | |
... | |
... | |
UserModule.php |
Yii の柔軟な設計を考えると、モジュールにしなくてもアクション単位で MVC を作ることが不可能ではないように思えますが、モジュールというパッケージにすることで、より管理がしやすくなるのも利点かなと思います。
逆に欠点としては、URL に気をつけないといけないのと、ファイル数が増えることです。 URL に関しては、モジュールを使う場合、次のようになるため
http://example.com/index.php?r=module/controller/action
コントローラのデフォルトアクションの指定や、ビューのレンダリング、URL の作成などに工夫が必要になります。
0 件のコメント:
コメントを投稿