2011年12月20日

Yii Framework: ユーザ関連の実装をモジュールで作る利点

ユーザ関連の実装を MVC そのままの雰囲気で作っていくと、User モデル、User コントローラにすべての実装をまとめて、ビューのみそれぞれのアクションで分離する、という形になる恐れがあります。

コントローラのアクションがそれほど多くない場合や、こまかなバリデーションの分離を必要としない場合は、とくに問題がない気がしますが、ユーザ関連のような、こまかなアクション、こまかなバリデーションの分離を実装しないといけない場合、User モデル、User コントローラ、User アクションビューという形で実装すると、モデル、コントローラのコードが膨れ上がり、複雑にもなり、かつ再利用もしにくくなります。

Yii にはそれをカバーするためにシナリオというものがあって、特定のタイミングで特定のバリデーションを使用できるようになっていますが、それでも、モデル、コントローラのさまざまな負担を完全に解消することは難しく、また、アクション単位でファイルを分離することで再利用性は高められ、コントローラの負担は軽減されますが、バリデーションの問題などが残ってしまいます。

そこでモジュールを使ってそれらを実装する、という考えになります。簡単に利点をあげていくと、以下のような感じです。

  • 簡単に再利用ができる
  • 管理しやすく、カスタマイズも容易
  • アクション単位で MVC が作れる
  • よって、シナリオをこまかく指定しなくてもよくなる
  • ビュー部分は新しく作る必要がなく、カスタマイズするだけ (再利用時)

重要な部分は アクション単位で MVC が作れる ことでしょう。以下のディレクトリ構造を見れば、雰囲気がわかるかと思います。 user module の方は、ひとつのアクションに対して MVC を作る形なので、モデル、コントローラともにコードが膨れ上がることもなく、バリデーションも特定のアクションのみのものを記述するだけになります。

Yii の柔軟な設計を考えると、モジュールにしなくてもアクション単位で MVC を作ることが不可能ではないように思えますが、モジュールというパッケージにすることで、より管理がしやすくなるのも利点かなと思います。

逆に欠点としては、URL に気をつけないといけないのと、ファイル数が増えることです。 URL に関しては、モジュールを使う場合、次のようになるため

http://example.com/index.php?r=module/controller/action

コントローラのデフォルトアクションの指定や、ビューのレンダリング、URL の作成などに工夫が必要になります。


参考リンク

0 件のコメント:

コメントを投稿