Implementando patrón repositorio

Posted on 13 of enero, 2016 by admin in Pattern

Este patrón de diseño nos ayuda a mejorar la forma de acceder a nuestra base de dato en general y permite desacoplar el acceso a la base de datos. De esta forma si queremos cambiar la base de datos de nuestra aplicación o hacer pruebas de los modelos creados mediante este patrón no es posible hacer esto con facilidad.

Veremos un breve ejemplo de cómo implementarlo:

    1. Crearemos una app tipo console en vs.
    2. Creamos nuestro modelo de prueba y lo llamaremos Persona. Persona no es más que una clase con las siguientes propiedades:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace com.jprograming.sistema.Enititys
{
public class Persona
{
public int IdPersona { get; set; }
public string Nombre { get; set; }
public string Apellido { get; set; }
public int Age { get; set; }
}
}

  1. Lo siguiente es crear nuestra clase repository la cual será la encargada de acceder a nuestros datos en la base de datos o en la memoria en este ejemplo nos basaremos en acceder a la memoria ya que en internet mayor estos ejemplos se basan en acceder a la base de datos pero en teoría es lo mismo fácilmente podemos adaptar este ejemplo para la base de datos con tan solo modificar los métodos.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using com.jprograming.sistema.Enititys;

namespace com.jprograming.sistema.Repsotory
{
public class PersonaRepository
{
List db = new List();

public PersonaRepository() {

db.Add(new Persona() { IdPersona = 1, Nombre = “Juan”, Apellido = “Reyes”, Age = 25 });
db.Add(new Persona() { IdPersona = 2, Nombre = “Juana”, Apellido = “Reyes”, Age = 27 });
db.Add(new Persona() { IdPersona = 3, Nombre = “Maria”, Apellido = “Lopez”, Age = 32 });
db.Add(new Persona() { IdPersona = 4, Nombre = “Stuard”, Apellido = “Encarnacion”, Age = 45 });

}

public virtual IEnumerable GetAll()
{
IEnumerable result;

result = db.ToArray();

return
result;
}

}
}

Vemos que en la clase repositorio hemos agregado una lista de objetos Personas para simular los record de la base de datos, también agregamos un método virtual que retorna un IEnumerable de tipo persona de esta forma para poder hacer linq o utilizar los métodos extensión de entity framework.

4. Ahora probaremos la clase repositorio y veremos el resultado:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using com.jprograming.sistema.Enititys;

namespace com.jprograming.sistema
{
class Program
{
static void Main(string[] args)
{
try
{

IEnumerable db = new Repsotory.PersonaRepository().GetAll();

foreach (Persona item in db)
{

Console.WriteLine(“Id Persona:{0} Nombre:{1} Apellido{2} Edad{3}”, item.IdPersona, item.Nombre, item.Apellido, item.Age);
}

Console.ReadKey();
}
catch (Exception ex )
{

new Exception(ex.Message);
}

}
}
}


Como resultado tendremos la siguiente salida:

articulo15