我想知道存储库模式如何工作以及如何在自定义MVC模式中实现它。在MVC中设置存储库模式
据我了解,Repository是一个只从实体类返回数据或将实体类保存到持久层的层。
现在我现在所看到这样的:
请求进入到我的控制器创建一个用户。只需一个用户名和密码。我的控制器会做这样的事情:
function CreateAction ()
{
$userRepo = new userRepository ();
$user = new userEntity ();
$user->setUsername('user');
$user->setPassword('123456');
$userRepo->create($user);
}
然后我userRepository类看起来是这样的:
class userRepository
{
public function create (User $user)
{
$this->db->exec ("INSERT INTO ... QUERY TO SAVE THE USER");
}
}
而且我userEntity类看起来是这样的:
class userEntity
{
private $username;
private $password;
public function setUsername ($username)
{
$this->username = $username;
}
public function getUsername ()
{
return $this->username;
}
public function setPassword ($password)
{
$this->password = $password;
}
public function getPassword ()
{
return $this->password;
}
}
现在我认为这里错误的第一件事是我在存储库类中使用查询。我在哪里实际将userEntity类保存到数据库?换句话说,我在哪里执行实际的SQL查询?我想正确的方法是在存储库的'create'方法内调用DAO。但是我仍然试图弄清楚DAO的真实外观,以及它与MVC模式中的Model有何不同。
但除此之外,这是实施存储库模式的正确方法?
对我来说看起来不错。存储库是sql的正确位置。可能想看看Doctrine2 ORM手册仅仅是为了想法。 – Cerad 2012-02-11 22:37:20