Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/01/2014, 09:33
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Consejo sobre Arquitectura en MVC con Repositorios.

Hola foreros !!!

Bueno... pues eso, agradecería a algún experto en arquitectura pudiera orientarme sobre como montar la arquitectura en MVC usando las típicas clases de Repositorio.

Verán, actualmente cuando desarrollo un aplicativo en MVC lo hago creando 4 proyectos.

1-. Entidades
2-. DataLayer (Con una referencia a Entidades)
3-. BussinessLayer (Ref. Entidades y Ref. DataLayer)
4.- Proyecto Web MVC (Ref BussinesLayer y Ref. Entidades)

Bien... en mi capa DataLayer realizo el acceso a la base de datos, recojo los datos en un DataTable, y en una clase Helper convierto los datos del DataTable a Entidades, y devuelvo estas entidades a la capa de negocio. De ahí al Proyecto MVC, y de ahí, o los uso directamente o creo un ViewModel para alguna vista, según me interese.

Ejemplo BÁSICO:

Acceso A Datos (PersonDL)
Código:
public Person GetPersonByCode(int code)
{

     DataTable tbData = AccessFactory.GetInstance().ReadSQL('select ....')

     //Convierte el DataTable a una clase de tipo Person, y lo devuelve
     return Helper.GetPerson(tbData);
}
Capa de Negocio (PersonBL)
Código:
public Person GetPersonByCode(int code)
{

     Person objPerson = PersonDL.GetInstance().GetPersonByCode(code);

     //Ejemplo básico de alguna operación que se debería hacer en el negocio.
     if(code.Equals(-1))
     {
          objPerson.IsManager = true;
     }

     return objPerson;
}
Controlador de Aplicativo Web
Código:
public ActionResult DetailPerson(int code)
{

     Person objPerson = PersonBL.GetInstance().GetPersonByCode(code);

     //En este caso uso la propia entidad como si fuera un ViewModel.
     return View(objPerson);
}
Bueno... como pueden ver, este es mi funcionamiento para desarrollo de aplicativos, definiendo bien su distribución en capas.

Ahora bien... Estoy estudiando el tema de usar clases de tipo Repositorio, y usando Ninject para la Inyección de estas en el controlador. Pero... en los ejemplos que he visto, no he visto como, ni donde meter el negocio...

Ejemplo de uso de Repositorio con EntityFramework:

Repositorio de Person
Código:
public class PersonRepository : IPersonRepository
{

    private DatabaseContext context;
    public DataBaseContext Context
    {
         if (context == null) context = new DataBaseContext();
        
         return context;
    }

     
    public Person GetPersonByCode(int code)
    {
        return context.Where(objWhere => objWhere.Code==code).FirstOrDefault();
    }
}
Controlador de Aplicativo Web
Código:
public class HomeController : Controller
{
      
      private IPersonRepository repository;
      public HomeController(IPersonRepository repository)
      {
           
             this.repository = repository;
      }

      public ActionResult DetailPerson(int code)
      {

           Person objPerson = this.repository.GetPersonByCode(code);

           //En este caso uso la propia entidad como si fuera un ViewModel.
           return View(objPerson);
      }
}
Creo que es más o menos así. Y bueno.. veo que esto está muy bien, para el tema de inyección de dependencias, pruebas, y demás. Pero... No sé donde colocar la lógica del negocio... Por lo tanto... ¿Alguien podría darme alguna noción de como crear la arquitectura en MVC usando el patrón Repository?

Gracias por vuestro tiempo leyendo el post, mejor dicho... muchas gracias.
__________________
Charlie.