Foros del Web » Programación para mayores de 30 ;) » .NET »

Consejo sobre Arquitectura en MVC con Repositorios.

Estas en el tema de Consejo sobre Arquitectura en MVC con Repositorios. en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 03/01/2014, 09:33
 
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.
  #2 (permalink)  
Antiguo 04/01/2014, 03:00
 
Fecha de Ingreso: octubre-2012
Ubicación: España
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 2
Respuesta: Consejo sobre Arquitectura en MVC con Repositorios.

Hola, yo no soy informático ni me dedico a ello, sólo soy aficionado pero en mi opinión buscas hacer una aplicación con una arquitectura domain driven design, si buscas en internet sobre esta arquitectura verás bastantes ejemplos sobre repositorios y las capas que lleva. Yo de lo que he sacado en claro de lo que llevo leído lo hago así:

- Capa DAL o acceso a datos. (referencia a entity framework y a la capa Core). Aquí sólo pongo una clase que hereda de DbContext y que implementa una interfaz que está situada en la capa Core.

-Capa Core o de dominio. (referencia a entity framework). Aquí defines tus entidades y te planteas cuales de tus entidades serán agregados, objetos-valor o entidades raíz para tenerlo claro a la hora de implementar la capa de aplicación. Además de las entidades aquí pones también la interfaz que implementa la clase de la capa de acceso a datos y las interfaces que implementarán los servicios de la capa de aplicación. Mediante estas interfaces es como tendrás acceso a la base de datos y a la capa de aplicación.

-Capa de Aplicación. (referencia a entity framework y a Core). Aquí van los servicios osea, los insertar, eliminar... e implementan las interfaces estas de la capa Core. Aquí es donde tienes que tener claro lo de los agregados porque para acceder al agregado debes hacerlo desde la entidad raíz.

-Capa de Infraestructura Transversal. (referencia a ninject en tu caso yo lo hago con Unity y a Core). Aquí según he leído es donde se pone lo relacionado con el Ioc, envío de mails...

-Capa de Presentación. (referencia a Core y a Infraestructura Transversal). Aquí está claro lo que va.

También puedes poner capa de servicios distribuídos si tienes webservices. Si te fijas en las referencias ves que sólo tiene referencia a Core o a Inf. Transversal pero claro también necesitas las dll de aplicación y dal para que funcione. Yo en lugar de agregar la referencia lo que hago es abrir las propiedades de las capas de Aplicación y de acceso a datos y en los eventos de compilación en la parte que pone línea de comando del evento posterior a la compilación pongo esto:

copy /Y "$(SolutionDir)ShiftsOfWork.Dal\bin\Debug\ShiftsOf Work.Dal.dll" "$(SolutionDir)ShiftsOfWork.Presentation\bin"

Este comando copia la dll de la capa de acceso a datos en la capa de presentación después de que compilas el proyecto. Como también la necesitas en la capa de Inf. Transversal, pues pones debajo el mismo comando cambiando el Presentation por Inf. Transversal. En la capa de Aplicación haces igual. Si lo haces así, acuérdate de incluir estas dll en el proyecto desde el visual studio porque si no las incluyes al publicar el proyecto no te las añade.

Más o menos esto es lo que llevo yo sacado en claro pero ya te digo ni soy profesional ni nada, sólo me dedico a leer por curiosidad y gusto así que si alguien con una formación más adecuada puede orientarte mejor pues también me vendría bien a mi.
Saludos

Etiquetas: arquitectura, consejo, control, mvc, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:07.