Pergunta

Quem tem a responsabilidade


Quem tem a responsabilidade de iniciar e terminar a unidade de trabalho em uma arquitetura MVC?

Foi útil?

Solução

Não é uma responsabilidade de um controlador, viola SRP . Controlador não deve mesmo saber sobre uow em tudo. Na web, um uow por solicitação para o servidor é normalmente usado. Neste caso uow devem ser eliminados no final de uma solicitação e começou em algum lugar após o início de um pedido (o ideal é começar de uma UOW deve ser preguiçoso). O melhor lugar para fazer isso é Global.asax (ou sua classe HttpApplication) usando manipuladores Application_EndRequest e Application_BeginRequest.
Isto pode ser facilmente conseguido com um quadro de IOC (o meu favorito é Windsor), consulte esta questão para detalhes de implementação.

Outras dicas

O controlador. Isto torna-se o contexto, para que você possa começar e terminar a unidade de trabalho. Por exemplo, uma sessão de nHibernate por solicitação seria preciso que você saiba quando o pedido tinha começado e acabado, então você precisa de contexto para dar-lhe o pedido.

Eu sou um crente na arquitetura de baixo acoplamento. Meu controlador não sabe nada sobre o repositório, contexto ou UnitOfWork. Eu criei uma camada de serviço (não tenho certeza que é o termo certo) que as chamadas do controlador. Este serviço, em seguida, trabalha com o repositório (dll) de persistir todos os dados.

Como zihotki disse que você estaria violando o SRP se você der essa responsabilidade para o controlador. Esta é uma manipulação orientada padrão de dados, e como tal não deve ser uma preocupação para o controlador ... que tornaria mais duas violações:. Um para o SRP e anothrt do princípio da SoC

Quanto a quem tem a responsabilidade, isso é algo a ser definido pela sua arquitetura. A / sugestão EndRequest StartRequest parece bastante sólida.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top