私は現在、モデル、マッパー、コントローラーを使用した小さなアプリケーションに取り組んでいます。私の質問は、(一致する答えが見つからなかったため)、次のような状況で、マッパーがモデル(およびコントローラー)とどのように相互作用するかです。
$user = new UserModel();
$user->setId('21');
$userMapper = new UserMapper($user);
$userMapper->retrieve();
これは可能な限りうまく機能します。モデルには、マッパーが必要なユーザーを取得できる(そして、ユーザーオブジェクトにマップし直す)ためのIDがあります。
私の問題は、このコードをどのようにラップできるかということです。つまり、このコードは非常に生であり、コントローラーで使用することは絶対にお勧めできません。短くしたいのですが、正確にはわかりません。
public function view($id)
{
$user->find($id); // this seems always to be tied with the user object/model (e.g. cakephp), but I think the ->find operation is done by the mapper and has absolutly nothing to do with the model
$view->assign('user',$user);
}
次のようになります。
public function view($id)
{
$mapper = $registry->getMapper('user');
$user = $mapper->find($id);
// or a custom UserMapper method:
# $user = $mapper->findById($id);
$view->assign('user',$user);
}
しかし、これははるかに多くのコードです。プロシージャを親コントローラークラスに含めて、明示的に呼び出さなくgetMapper
ても簡単にアクセスできるようにする必要がありますか?$this->_mapper
問題は、マッパーパターンを壊したくないので、モデルがSQL / Mapperメソッドに直接アクセスするべきでは$model->find()
ないということですが、最初にマッパーを作成してこれを実行するためだけに多くのコードを用意する必要はありません。これなど。
私は多くのパターンやマッピング/モデリング手法に慣れていないので、私を少し理解していただければ幸いです。私自身はすでに十分に混乱しています。