Minha pergunta é semelhante a essa no Stack Overflow: Qual é a maneira correta de usar a Unidade de trabalho / repositórios na camada de negócios?
Cenário:
- Solução .Net
- IRepository usado para recuperar objetos do banco de dados
- IUnitOfWork usado para permitir transações entre vários repositórios
Isso faz sentido para mim e eu implementei algo nesse sentido que funciona bem. Agora, quero introduzir uma camada de lógica de negócios e estou com problemas para organizar os três elementos (BLL, UnitOfWork e Repository) em minha mente.
Meu entendimento:
- Repositório - recuperação, manipulação de dados
- UnitOfWork - persistência
- BLL - lógica relevante para os negócios ('mundo real') (não gosta desse termo!)
Considere que temos um front end do ASP.Net MVC.
Como é uma BLL e como é o controlador MVC que a usa?
Para referência: gostaria de saber se talvez a minha implementação IUnitOfWork / IRepository possa ser a causa subjacente da minha confusão.
public class IRepository<T>
{
private IObjectSet<T> objSet;
public IRepository<T>(IUnitOfWork uow)
{
objSet = uow.CreateObjectSet<T>();
}
public IQueryable<T> Add(T entity)
{
objSet.Add(entity);
}
//etc. etc. for delete, attach, getall
}
Então, eu sinto que, se eu tiver um BLL, deveria passar o IUnitOfWork para que ele possa usá-lo para criar as instâncias de IRepository necessárias. Mas como a BLL (DLL separada do front-end) 'saberá' qual implementação do IRepository criar?