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:
Capa de Negocio (PersonBL)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); }
Código:
Controlador de Aplicativo Webpublic 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; }
Código:
Bueno... como pueden ver, este es mi funcionamiento para desarrollo de aplicativos, definiendo bien su distribución en capas.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); }
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:
Controlador de Aplicativo Webpublic 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(); } }
Código:
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?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); } }
Gracias por vuestro tiempo leyendo el post, mejor dicho... muchas gracias.