Mi pregunta es similar a esta sobre Stack Overflow: ¿Cuál es la forma correcta de usar la Unidad de Trabajo / Repositorios dentro de la capa empresarial?
Guión:
- Solución .Net
- IRepository utilizado para recuperar objetos de DB
- IUnitOfWork solía permitir transacciones en múltiples repositorios
Esto tiene sentido para mí y he implementado algo en este sentido que funciona bien. Ahora quiero introducir una capa de lógica de negocios y estoy teniendo problemas para organizar los tres elementos (BLL, UnitOfWork y Repository) en mi mente.
Mi punto de vista:
- Repositorio - recuperación de datos, manipulación
- UnitOfWork - persistencia
- BLL: lógica relevante para el negocio ('mundo real') (¡no me gusta ese término!)
Considere que tenemos una interfaz ASP.Net MVC.
¿Cómo se ve un BLL y cómo se ve el controlador MVC que lo usa?
Como referencia: me pregunto si quizás mi implementación IUnitOfWork / IRepository podría ser la causa subyacente de mi confusión.
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
}
Entonces siento que si tengo un BLL, debería pasarle el IUnitOfWork, para que pueda usarlo para crear las instancias de IRepository que necesita. Pero, ¿cómo "sabrá" el BLL (DLL separado del front-end) qué implementación de IRepository construir?