Quando usar alguns padrões na arquitetura MVC

Estou analisando sobre a arquitetura MVC e estou com dúvidas no model.

Para que serve as camadas de domínio, a camada de serviço e a camada de repositório?

Quando usa-se o padrão DAO?

Qual a vantagem de usar o padrão DDD?

Outra coisa, preciso de algumas dicas e sugestões de como fazer a comunicação do controller com o model.

Obrigado desde já.