Model &

1 Cevap php

I currently work on a small application with models, mappers and controllers. My question is, (because I did not found any matching answer), how does the mapper interact with the model (& the controller), when we have the following situation.

$user = new UserModel();
$user->setId('21');
$userMapper = new UserMapper($user);
$userMapper->retrieve();

Bu, mümkün olduğu kadar iyi çalışır, modeli mapper gerekli kullanıcı almak (ve bir kullanıcı nesnesi haline geri harita) hangi bir kimliği vardır.

My problem is, how can I wrap this code, I mean, this code is very raw and it is definitly not very recommended to be used in a controller. I want to shorten it, but I do not exactly know how:

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);
}

Bu daha fazla gibi görünmelidir:

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);
}

But this is much more code. Should I include the getMapper procedure within the parent controller class, so I can easily access $this->_mapper without explicitly calling it?

Sorun mapper desen kırmak istemiyorum, bu yüzden Modeli $model->find() ile doğrudan herhangi bir SQL / Mapper yöntem erişmek olmamalı, ama ben sadece ilk için bir sürü kod var istemiyorum Bir eşleştiricisini oluşturma ve bunu yapmak ve bu gibi

Ben pek çok desen ve haritalama / modelleme teknikleri için yeni duyuyorum, çünkü kendimi zaten yeterince karışık, sen bana biraz anlamak umuyoruz.

saygılarımla,

1 Cevap

Bir Service Layer, mesela ekleyebilirsiniz

class UserService
{
    public function findUserById($id)
    {
        // copied and adjusted from question text
        $user = new UserModel();
        $user->setId($id);
        $userMapper = new UserMapper($mapper);
        return $userMapper->retrieve();
    }
}

Sizin Kontrolör doğrudan UserModel ve UserMapper erişmek, ancak Hizmet aracılığıyla olmaz.