僕は2.xを使っていますが、
基本的にComponentはController側の共通処理、BehaviorはModel側の共通処理を記述します。
ComponentもBehaviorもそれぞれ異なるメソッドやコールバック、プロパティをもっているので
それを上手く使った実装をします。
経験則も含まれているので、怪しい箇所などあればコメント頂ければと思います。
Component
- Controllerで使用する便利系処理、共通処理の実装
- サービスレイヤの実装
- Controllerのコールバック実装
といった使い方をしています。
1.Controllerで使用する便利系処理、共通処理の実装
Controllerで使用する範囲の便利系処理を記載します。
2.サービスレイヤの実装
サービスレイヤには賛否があるかもしれないですが、
ControllerとModelの間に挟み込み、Modelの操作をまとめる実装をします。(以下参考リンクより)
複数のモデルへsaveをかける場合や、APIと連携しつつDBへの更新を行う場合など、一連のモデルの処理を取りまとめるような実装になりますね。
サービスについては以下が参考になるかと思うので一読いただければと思います。
MVCモデルにおけるサービスの役割について教えて下さい
※Component内でのModelの使用は推奨されていませんが、1.x系のドキュメントにはアクセス方法が記載されています。
アプリケーションの規模が大きくなると、サービスレイヤがないと管理が難しくなってくるためこういった実装を行っています。
3.Controllerのコールバック実装
例えば、ControllerのbeforeFilterとbeforeRenderのタイミングでログを出したい、といった場合にComponentを作成します。
こうすることにより、一連の処理を管理しやすくなり、実行タイミングなども制御しやすくなります。
Behavior
- Modelで使用する便利系処理、共通処理の実装
- Modelのコールバック実装
で使用します。
1.Modelで使用する便利系処理、共通処理の実装
Model共通で使用する処理を記述しますが、Model経由でControllerから呼び出す場合も稀にあります。
例えば、CakePHPでは対応していないValidation処理を取りまとめたValidationBehaviorを作ったり、
ビットフラグの取り扱うBitFlagBehaviorを作ったりしています。
2.Modelのコールバック実装
複数モデルで同様のコールバック処理を入れたい場合や、同様にログを出力したい場合などに使用しています。
例えば、削除フラグのdeletedカラムが存在しているとします。
この場合、モデルでfindする際にdeleted=1のデータを誤って取得しないよう、
beforeFindのコールバックでdeleted=0のみ取得するような処理を記述します。
ここのdeletedフラグが複数テーブルに存在する場合は、複数のモデルのbeforeFindに同様の記述が発生するので
BehaviorのbeforeFindコールバックに処理を記述して各モデルで読み込ませます。
上記に該当しない共通処理
CakePHPのHashクラス(1.x系だとSet?)のような共通処理(便利関数群)はiichiさんの回答にあるような
独自クラスを作成して読み込ませます。
長々と書いてしまいましたが、回答になっていますでしょうか。。。
何かございましたらコメントを頂ければと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。