Configurando um padrão de repositório no MVC

Estou tentando descobrir como o padrão de repositório funciona e como ele pode ser implementado em um padrão MVC personalizad

Pelo que entendi, o Repositório é uma camada que simplesmente retorna dados de uma classe de entidade ou salva a classe de entidade em uma camada persistent

Agora, atualmente, vejo assim:

Um pedido entra no meu controlador para criar um usuário. Apenas um nome de usuário e senha. Meu controlador fará algo assim:

function CreateAction ( )
{
    $userRepo = new userRepository ( );
    $user = new userEntity ( );

    $user->setUsername('user');
    $user->setPassword('123456');

    $userRepo->create($user);
}

Então meu userRepository class fica assim:

class userRepository
{
    public function create ( User $user )
    {
        $this->db->exec ( "INSERT INTO ... QUERY TO SAVE THE USER" );
    }
}

E meu userEntity class fica assim:

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

Agora, a primeira coisa que acho errada aqui é que estou usando uma consulta dentro da classe do repositório. Onde eu realmente salvo a classe userEntity no banco de dados? Então, em outras palavras, onde eu executo as consultas SQL reais? Eu acho que a maneira correta seria chamar um DAO dentro do método 'create' do repositório. Mas ainda estou tentando descobrir como um DAO realmente parece e quão diferente é comparado a um 'Model' em termos de Model em um padrão MV

Mas, fora isso, essa é a maneira correta de implementar o padrão de repositório

questionAnswers(4)

yourAnswerToTheQuestion