martes, 8 de marzo de 2016

NCapas Ntier EntityFrameWork Generico 2


NCapas Ntier EntityFrameWork Generico 2


Business Layer
Esta es la segunda parte de un ejemplo NCapas y EntityFramework, para esto trabajaremos agregando un nuevo proyecto a la solucion en este caso la coloque como BL(Bussines Layer).
Por un lado tenemos las entidades de la DB en el proyecto Entity lo que queremos hacer es tener un CRUD de cada entidad crear uno a uno como que cansa y se vuelve tedioso por ello agrege un CRUD generico de entidades las cuales tambien podremos extenderlas con nuevos metodos una ves implementada.


Agregamos un interface generica que contiene las operaciones comunes entre las entidades.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace BL.crud {
 public interface IGenericBL < T > where T: class {
  IList < T > GetAll();
  T Find(Expression < Func < T, bool >> expresion);
  void Add(params T[] items);
  void Update(params T[] itemsy);
  void Remove(params T[] items);

 }
}
Creamos la clase GenericBL e implementamos la imterface creada, esta parte es interesante por que solo llamando al repositorio podemos realizar cualquier operacion CRUD


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System.Linq.Expressions;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Text;
using System.Threading.Tasks;
using DAL.Dao;
using DAL.Generic;

namespace BL.crud
{
    public class GenericBl<T> : IGenericBL<T> where T : class
    {
        public GenericDataRepository<T> _repository;
      
        public GenericBl(GenericDataRepository<T> _repo)
        {
            _repository = _repo;
        }

       
        public void Add(params T[] items)
        {
           _repository.Add(items);
        }

        public IList<T> GetAll()
        {
            return _repository.GetAll();
        }

        public T Find(Expression<Func<T, bool>> expresion)
        {
            return _repository.Find(expresion);
        }

        public void Remove(params T[] items)
        {
            _repository.Remove(items);
        }

        public void Update(params T[] items)
        {
            _repository.Update(items);

        }
    }
}

Hasta aqui hemos concluido con crearnos una libreria generica para las operaciones basicas CRUD.
Ahora nos crearemos las clases de implementacion a nuestras entidades por ello que q llevaran el sufijo Imp, Ejm de una entidad Usuario.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using BL.crud;
using DAL.Dao;
using DAL.Generic;
using Entity;

namespace BL.BlImp
{
    public class UsuarioImp: GenericBl<Usuario>
    {
        public UsuarioImp() : base(new UsuarioRepository())
        {
        }
    }
}

Esta es la clase concreta que invocaremos desde nuestra capa de presentacion esta clase podremos extenderla solo a nuevas operaciones de negocio que necesitemos.

No hay comentarios:

Publicar un comentario