desarrollo en 3 capas vb.net & c #

Upload: freddy-plata-antequera

Post on 09-Feb-2018

245 views

Category:

Documents


4 download

TRANSCRIPT

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    1/29

    Desarrollo en Capas .Net (Parte 1)viernes, 12 de octubre de 2012

    Introduccin

    Este sera el primero de 4 artculos en el que trataremos el desarrollo en capas en .net usando

    Entity Framework.

    Aspectos a considerar

    Se usara Visual Studio 2010 y Sql Express 2008.

    Se realizara con los lenguajes de C# y VB.Net.(pero solo se explicara con c#)

    Se usara la versin 4.1 de Entity Framework

    Se usara un generador de plantillas T4.

    En este primer articulo veremos como generar nuestro modelo de datos .edmxde entity framework y

    veremos como usar DbContext Generatorpara generar nuestro contexto y clases poco de nuestro

    modelo. Cual es la finalidad de esto separa las entidades de la persistencia para poder usar estas en

    otras capas. Para hacer esto necesitaremos la versinADO.NET Entity Framework 4.1tambiennecesitaremos el generador de plantillas para c#EF 4.x DbContext Generator for C#o para vb.netEF 4.x

    DbContext Generator for VB.NET

    Lo que aremos a lo largo de todo el ejemplo sera dividir el proyecto en capas para poder notar todas las

    ventajas que esto aporta entre ellas reutilizacin de cdigo, mejor mantenimiento de la aplicacin,

    separacin de responsabilidades etc.

    La siguiente imagen muestra la estructura que tendr nuestro proyecto final y la comunicacin que abra

    entre las diferentes capas.

    Para todo el ejemplo usare una base de datos llamadaEstudiantes que tiene el siguiente diseo.

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity.htmlhttp://www.microsoft.com/en-us/download/details.aspx?id=8363http://www.microsoft.com/en-us/download/details.aspx?id=8363http://www.microsoft.com/en-us/download/details.aspx?id=8363http://visualstudiogallery.msdn.microsoft.com/7812b04c-db36-4817-8a84-e73c452410a2http://visualstudiogallery.msdn.microsoft.com/7812b04c-db36-4817-8a84-e73c452410a2http://visualstudiogallery.msdn.microsoft.com/7812b04c-db36-4817-8a84-e73c452410a2http://visualstudiogallery.msdn.microsoft.com/73679ae5-e358-4e76-a538-c7b5e04ac073http://visualstudiogallery.msdn.microsoft.com/73679ae5-e358-4e76-a538-c7b5e04ac073http://visualstudiogallery.msdn.microsoft.com/73679ae5-e358-4e76-a538-c7b5e04ac073http://visualstudiogallery.msdn.microsoft.com/73679ae5-e358-4e76-a538-c7b5e04ac073http://visualstudiogallery.msdn.microsoft.com/73679ae5-e358-4e76-a538-c7b5e04ac073http://visualstudiogallery.msdn.microsoft.com/73679ae5-e358-4e76-a538-c7b5e04ac073http://visualstudiogallery.msdn.microsoft.com/7812b04c-db36-4817-8a84-e73c452410a2http://www.microsoft.com/en-us/download/details.aspx?id=8363http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    2/29

    Lo primero sera crear un proyecto en blanco y agregar una biblioteca de clases llamadaDataAcces.

    Ahora vamos a generar el modelo de nuestra base de datos para eso agregamos un nuevo elemento y

    elegimos ADO.NET Entity Data Model.

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    3/29

    Elegimos generar desde la base de datos.

    Especificamos la cadena de conexin hacia la base de datos.

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    4/29

    Ahora seleccionamos los objetos de la base de datos que queremos modelar en este caso seleccionamos

    las 3 tablas.

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    5/29

    Con esto tendremos nuestro modelo de la base de datos.

    Ahora vamos a generar nuestras clases poco haciendo uso del generador deDbContext. Para esto

    hacemos clic derecho en un espacio en blanco del modelo y elegimos Agregar elemento de generacin

    de cdigo.

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    6/29

    Elegimos ADO.NET DbContext Generator(tienen que haberlo instalado antes).

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    7/29

    Si aparece un cuadro de advertencia eligen no mostrar este mensaje de nuevo y aceptar. Esto agregara 2

    plantillas(cuyos nombres terminan en .tt) a su proyecto.

    La plantilla Students.Context.tt cre una clase DbContext conteniendo las colecciones de entidades y la

    plantilla Students.tt cre clases separadas para cada tabla.

    Para que el modelo DbContext funcione necesita de la version 4.1de entity framework(tienen que

    instalarlo) as que agregaremos la dll para eso agregamos una referencia al proyecto y buscamos la dll en

    la ruta que se instalo que por lo general es C:\Archivos de programa\Microsoft ADO.NET Entity

    Framework 4.1\Binaries

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    8/29

    Ahora lo que aremos es mover la plantilla Students.ttla que contiene las clases de cada tabla a otro

    proyecto biblioteca de clases en este caso llamadoEntities.

    Para que esta plantilla funcione ahora que lo hemos movido a una proyecto nuevo tendremos que

    configurar la linea que apunta hacia el modelo EDMXpara eso damos doble clic en la

    platilla Students.tty cambiamos la ruta de string InputFilepara que apunte hacia el modeloEDMXque

    se encuentra en el proyecto DataAcces.

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    9/29

    Ahora cambiaremos el espacio de nombres de la platillaStudents.Context.ttya que las clases entidades

    las movimos hacia el proyecto Entitiestenemos que modificar el espacio de nombres de la

    plantilla Students.Context.ttpara esto abrimos la ventana de propiedades de la plantilla y establecemos

    el espacio de nombres en Entities.

    Por ultimo lo que tenemos que hacer es agregar una referencia del proyecto Entities en el proyecto

    DataAcces.

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    10/29

    Nota: En el caso del proyecto vb.net en la clase de la platilla Students.Context.vb es necesario agregar un

    Imports Entities para que el contexto reconozca las clases entidad.

    Con esto terminamos la primera parte de nuestro Proyecto. Lo que hemos hecho es crear el modelo de

    nuestra base de datos y tambin hemos generado el contexto y las clases entidad del modelo y tambin

    hemos separado las clases entidad en un proyecto aparte para poder usar estas clases en las dems

    capas, ya que como lo dije al principio la finalidad de todos esto es separar las entidades de la

    persistencia.

    Descargar Proyecto C#

    Descargar Proyecto VB.Net

    Nos vemos en la segunda parte donde desarrollaremos el cdigo que tendr nuestra cada dedatos(DataAcces).

    Desarrollo en Capas .Net (Parte 2) - Capa de Datosdomingo, 21 de octubre de 2012

    En el articulo anterior creamos nuestro modelo EDMXde nuestra base de datos y tambin creamos

    nuestras clases entidades y las dividimos en una capa aparte llamada Entities.

    Pueden ver el primer articulo aqu.

    Desarrollo en Capas .Net(Parte 1)

    Pues bien en este segundo articulo desarrollaremos el cdigo que tendr nuestra capa de

    datos(DataAcces).

    En la capa de datos(DataAcces) es donde tendremos todas las query a nuestra base de datos.

    Antes de empezar a programar en nuestra capa de datos primero agregaremos una clase

    llamada NotaAlumnoen nuestra capa Entities(ya veremos para que nos servira).

    ?

    1

    2

    3

    4

    5

    6

    7

    publicclassNotaAlumno

    {

    publicintNotId { get; set; }

    publicstringAluNombre { get; set; }

    publicstringMatNombre { get; set; }

    publicdecimalNotNota { get; set; }

    }

    Entonces nuestra capa Entitiesnos quedara de la siguiente manera.

    http://sdrv.ms/QyDtUZhttp://sdrv.ms/QyDtUZhttp://sdrv.ms/QyDzvJhttp://sdrv.ms/QyDzvJhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://sdrv.ms/QyDzvJhttp://sdrv.ms/QyDtUZ
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    11/29

    Como pueden observar nuestra capaEntitiestendr nuestras clases entidades que generamos en el

    articulo anterior y la nueva clase que acabamos de agregar.

    Ahora si empecemos con el cdigo que tendr nuestra capa de datos(DataAcces) lo que aremos es que

    por cada clase entidad agregaremos una clase a nuestra capa de datos(DataAcces) y dentro de estas

    tendremos las diferentes query a nuestra base de datos.

    Agreguemos la primera clase que se llamara AlumnoDAL.

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    publicclassAlumnoDAL

    {

    publicstaticList CargarAlumnos()

    {

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    returnbd.Alumno.ToList();

    }

    }

    publicstaticboolExiste(intid)

    {

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    var query = (from al inbd.Alumno where al.AluId == id select al).Count();

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    12/29

    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

    if(query == 0)

    returnfalse;

    else

    returntrue;

    }

    }

    publicstaticAlumno IdAlumno(intid)

    {

    Alumno alum = newAlumno();

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    var query = (from al inbd.Alumno

    where al.AluId == id

    select al).Single();

    alum.AluId = query.AluId;

    alum.AluNombre = query.AluNombre;

    alum.AluApellido = query.AluApellido;

    alum.AluEdad = query.AluEdad;

    alum.AluDireccion = query.AluDireccion;

    }

    returnalum;

    }

    publicstaticAlumno CreateAlumno(Alumno alum)

    {

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    13/29

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    Alumno al = newAlumno();

    al.AluNombre = alum.AluNombre;

    al.AluApellido = alum.AluApellido;

    al.AluEdad = alum.AluEdad;

    al.AluDireccion = alum.AluDireccion;

    bd.Alumno.Add(al);

    bd.SaveChanges();

    alum.AluId = al.AluId;

    }

    returnalum;

    }

    publicstaticAlumno UpdateAlumno(Alumno alum)

    {

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    var query = (from al inbd.Alumno

    where al.AluId == alum.AluId

    select al).Single();

    query.AluNombre = alum.AluNombre;

    query.AluApellido = alum.AluApellido;

    query.AluEdad = alum.AluEdad;

    query.AluDireccion = alum.AluDireccion;

    bd.SaveChanges();

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    14/29

    70

    71

    72

    73

    74

    }

    returnalum;

    }

    }

    Dentro de esta clase tenemos una serie de mtodos que ahorita explicare.

    CargarAlumnos()Este mtodo lo nico que hace es retornar todos los registros de la tabla Alumno.

    Existe()Este mtodo se encarga de comprobar si un alumno existe por medio del id retornafalsesi no

    existe y truesi ya existe.

    IdAlumno()Este mtodo lo que hace es retornar los datos de un alumno tambin por medio del id.

    CreateAlumno()Este mtodo agrega un nuevo alumno a nuestra base de datos y luego de agregarlo

    retornamos la entidad osea el alumno agregado.UpdateAlumno()Este mtodo actualiza un alumno utilizamos el id para actualizar los datos y luego

    tambin retornamos la entidad osea el alumno actualizado.

    Ahora agreguemos una clase llamada NotaDal.

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    publicclassNotaDal

    {

    publicstaticboolExiste(intidalum, intidmat)

    {

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    var query = (from not inbd.Nota where not.AluId == idalum && not.MatId == idmat select not).Count

    if(query == 0)

    returnfalse;

    else

    returntrue;

    }

    }

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    15/29

    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

    publicstaticNota IdNota(intid)

    {

    Nota not = newNota();

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    var query = (from n inbd.Nota

    where n.NotId == id

    select n).Single();

    not.NotId = query.NotId;

    not.AluId = query.AluId;

    not.MatId = query.MatId;

    not.NotNota = query.NotNota;

    }

    returnnot;

    }

    publicstaticNota CreateNota(Nota not)

    {

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    Nota n = newNota();

    n.AluId = not.AluId;

    n.MatId = not.MatId;

    n.NotNota = not.NotNota;

    bd.Nota.Add(n);

    bd.SaveChanges();

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    16/29

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    not.NotId = n.NotId;

    }

    returnnot;

    }

    publicstaticNota UpdateNota(Nota not)

    {

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    var query = (from n inbd.Nota

    where n.NotId == not.NotId

    select n).Single();

    query.AluId = not.AluId;

    query.MatId = not.MatId;

    query.NotNota = not.NotNota;

    bd.SaveChanges();

    }

    returnnot;

    }

    }

    Dentro de esta clase encontramos los siguientes mtodos.

    Existe()Este mtodo se encargara de comprobar si una nota ya existe por medio del id del alumno y el id

    de la materia este mtodo nos ayudara para que un alumno solo pueda agregar una nota por materia.

    IdNota() Este mtodo lo que hace es retornar los datos datos de un registro por medio del id.

    CreateNota() Este mtodo agrega un registro a la tabla nota y luego retornamos la entidad osea el

    registro agregado.

    UpdateNota()Este mtodo actualiza una nota utilizamos el id para actualizar los datos y luego tambin

    retornamos la entidad osea el registro actualizado.

    Ahora agreguemos una clase llamada MateriaDal.

    .

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    17/29

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    publicclassMateriaDal

    {

    publicstaticList CargarMaterias()

    {

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    returnbd.Materia.ToList();

    }

    }

    }

    Dentro de esta clase solo tenemos un mtodo CargarMaterias()que lo nico que hace es retornar todos

    los registros de la tabla materia.

    Ahora agreguemos una clase llamada NotaAlumnoDal.

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    publicclassNotaAlumnoDal

    {

    publicstaticList CargarNotas()

    {

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    var query = from not inbd.Nota

    select newNotaAlumno

    {

    NotId = not.NotId,

    AluNombre = not.Alumno.AluNombre,

    MatNombre = not.Materia.MatNombre,

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    18/29

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    NotNota = not.NotNota

    };

    returnquery.ToList();

    }

    }

    publicstaticList NotasAlumno(intid)

    {

    using(EstudiantesEntities bd = newEstudiantesEntities())

    {

    var query = from not inbd.Nota

    where not.AluId == id

    select newNotaAlumno

    {

    NotId = not.NotId,

    AluNombre = not.Alumno.AluNombre,

    MatNombre = not.Materia.MatNombre,

    NotNota = not.NotNota

    };

    returnquery.ToList();

    }

    }

    }

    Dentro de esta clase encontramos los siguientes mtodos.

    CargarNotas()este mtodo retorna todos los registros de la tabla nota.

    NotasAlumno()este mtodo retorna todas las notas de un alumno es por eso que hacemos uso del id del

    alumno para solo devolver solo las notas de un alumno.

    En esta clase hicimos uso de la clase que agregamos a nuestra capa EntitiesllamadaNotaAlumnosi se

    fijan en la query que hacemos a la tabla nota hacemos uso de las propiedades de la clase para en vez de

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    19/29

    que nos muestre el id del alumno y la materia nos muestre el nombre del alumno y de la materia,

    haciendo tambin uso de las propiedades de navegacin que existen ente las tablas.

    Importante que dentro de cada clase que agregamos a nuestra capa de datos(DataAcces) necesitamos el

    espacio de nombresEntitiespara poder hacer uso de nuestras clases entidades.

    ?

    1 usingEntities;

    Eso seria todo en nuestra capa de datos, al final nuestro proyecto nos quedara de la siguiente manera.

    Resumiendo lo que hicimos agregamos 4 clases(DAL) a nuestra capa de datos(DataAcces) una por cada

    clase entidad y dentro de estas tenemos las diferentes query hacia la base de datos.

    Descargar Proyecto C#

    Descargar Proyecto VB.Net

    En el prximo articulo desarrollaremos el cdigo de nuestra capa de negocio(BussinesLayer).

    Desarrollo en Capas .Net (Parte 3) - Capa de Negociojueves, 25 de octubre de 2012

    En el articulo anterior desarrollamos nuestra capa de datos.

    Pueden ver el articulo aqu.Desarrollo en Capas .Net (Parte 2) - Capa de Datos

    La capa de negocio(BussinesLayer) se comunicara con la capa de presentacin, para recibir las

    solicitudes y presentar los resultados, y con la capa de datos para almacenar o recuperar datos de la

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://sdrv.ms/WBuY18http://sdrv.ms/WBuY18http://sdrv.ms/WBv1Kqhttp://sdrv.ms/WBv1Kqhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://sdrv.ms/WBv1Kqhttp://sdrv.ms/WBuY18http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-entity_21.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    20/29

    base de datos.

    Algo que seguro a mas de uno les traer molestias de esta capa de negocio sera que la mayora de las

    operaciones sern un pasamano, ya que esta retorna las operaciones de la capa de datos y

    las devolver en la capa de presentacin, pero no siempre sera as en otros casos se vera la importancia

    de esta capa sobre todo en aplicaciones complejas.

    Empecemos agregando una clase llamada AlumnoBL.

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    publicclassAlumnoBL{

    publicstaticList CargarAlumnos(){

    returnAlumnoDAL.CargarAlumnos();

    }

    publicstaticAlumno IdAlumno(intid){

    returnAlumnoDAL.IdAlumno(id); }

    publicstaticAlumno Save(Alumno alum){

    if(AlumnoDAL.Existe(alum.AluId)) returnAlumnoDAL.UpdateAlumno(alum);

    elsereturnAlumnoDAL.CreateAlumno(alum);

    }}

    Dentro de la clase tenemos los siguientes mtodos.

    CargarAlumnos()Este mtodo retorna todos los registros de la tabla Alumno.

    IdAlumno()Este metodo retorna los datos de un alumno por medio del id.

    Save()Este mtodo valida si el registro existe por medio del id y dependiendo de esto actualiza o agrega

    un registro.

    Ahora agreguemos una clase llamada MateriaBL.

    ?

    1

    2

    3

    4

    5

    6

    7

    publicclassMateriaBL{

    publicstaticList CargarMaterias(){

    returnMateriaDAL.CargarMaterias(); }

    }

    Dentro de esta clase solo tenemos un mtodo CargarMaterias()que lo nico que hace es retornar todos

    los registros de la tabla materia.

    Ahora agreguemos una clase llamada NotaBL.

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    21/29

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    1516

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    publicclassNotaBL

    {publicstaticNota IdNota(intid){

    returnNotaDAL.IdNota(id); }

    publicstaticboolCreateNota(Nota not){

    if(NotaDAL.Existe(not.AluId, not.MatId))returntrue;

    else{

    NotaDAL.CreateNota(not);

    returnfalse;}

    }

    publicstaticboolUpdateNota(Nota not){

    if(NotaDAL.Existe(not.AluId, not.MatId)){

    NotaDAL.UpdateNota(not); returntrue;

    }else{

    returnfalse;}

    }}

    Dentro de esta clase encontramos los siguientes mtodos.

    IdNota()Este mtodo lo que hace es retornar los datos datos de un registro por medio del id.

    CreateNota() Este mtodo valida si un registro existe por medio del id del alumno y el id de la materia si

    existe retorna true, y si no existe crea el registro y retorna false. Validamos si el registro no existe

    para que un alumno solo pueda agregar una nota por materia..UpdateNota() Este mtodo igual que el anterior valida si el registro existe por medio del id del alumno y id

    de la materia solo que si el registro existe actualizamos el registro y retornamos true, y si no existe

    retornamos false.

    Ahora agreguemos una clase llamada NotaAlumnoBL.

    ?

    1

    2

    3

    45

    publicclassNotaAlumnoBL{

    publicstatic List CargarNotas(){

    returnNotaAlumnoDAL.CargarNotas(); }

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    22/29

    6

    7

    8

    9

    10

    1112

    publicstatic List NotasAlumno(intid){

    returnNotaAlumnoDAL.NotasAlumno(id); }

    }

    Dentro de esta clase encontramos los siguientes mtodos.

    CargarNotas()este mtodo retorna todos los registros de la tabla nota.

    NotasAlumno()este mtodo retorna todas las notas de un alumno es por eso que hacemos uso del id del

    alumno para solo devolver solo las notas de un alumno.

    Importante que dentro de cada clase que agregamos a nuestra capa de negocio(BussinesLayer)

    necesitamos agregar referencias hacia las capas DataAccesy Entities.

    ?

    1

    2

    usingDataAcces;usingEntities;

    Eso seria todo en nuestra capa de negocio(BussinesLayer) al final nuestro proyecto quedara de la

    siguiente manera.

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    23/29

    Descargar Proyecto C#

    Descargar Proyecto VB.Net

    En el prximo y ultimo articulo desarrollaremos nuestra capa de presentacin.

    Desarrollo en Capas .Net (Parte 4) - Capa Presentacionmircoles, 31 de octubre de 2012

    En el articulo anterior desarrollamos nuestra capa de negocio

    Pueden ver el articulo aquDesarrollo en Capas .Net (Parte 3) - Capa de Negocio

    La capa presentacin(presentation) es la que ve el usuario (tambin se la denomina "capa de usuario"),

    presenta el sistema al usuario, le comunica la informacin y captura la informacin del usuario en un

    mnimo de proceso (realiza un filtrado previo para comprobar que no hay errores de formato).

    En este ultimo articulo es donde veremos como se comunican las diferentes capas entre si.

    Diseo de la aplicacin.

    http://sdrv.ms/WME2Auhttp://sdrv.ms/WME2Auhttp://sdrv.ms/RjfmMBhttp://sdrv.ms/RjfmMBhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-3-capa-de.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.htmlhttp://sdrv.ms/RjfmMBhttp://sdrv.ms/WME2Au
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    24/29

    Cargar Alumnos y Materias.

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    //cargo alumnos en combobox

    privatevoidCargarAlumnos()

    {

    cbxalumnos.DataSource = AlumnoBL.CargarAlumnos();

    cbxalumnos.ValueMember = "AluId";

    cbxalumnos.DisplayMember = "AluNombre";

    }

    privatevoidFrmAlumno_Load(objectsender, EventArgs e)

    {

    CargarAlumnos();

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    25/29

    12

    13

    14

    15

    16

    17

    18

    //cargo materias en combobox

    cbxmaterias.DataSource = MateriaBL.CargarMaterias();

    cbxmaterias.ValueMember = "MatId";

    cbxmaterias.DisplayMember = "MatNombre";

    }

    Tenemos un mtodo CargarAlumnos() que lo que hace es cargos el nombre de todos los alumnos en un

    combobox este mtodo lo llamaremos luego de actualizar o agregar un nuevo alumno para que los datos

    del combobox se actualicen y en el evento load del formulario tambin cargamos todas las materias en

    otro combobox.

    Agregar o Actualizar Alumno.

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    //Variable global que prepresenta al alumno seleccionado

    Alumno alum = null;

    privatevoidbtnguardar_Click(object sender, EventArgs e)

    {

    //compruebo las validaciones

    if(!ValidacionesAlumno())

    return;

    // si el cliente se ha seleccionado lo actualizo, sino se crea

    uno nuevo

    if(alum == null)

    alum = newAlumno();

    alum.AluNombre = txtnombre.Text;

    alum.AluApellido = txtapellido.Text;

    alum.AluEdad = Convert.ToInt16(txtedad.Text);

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    26/29

    16

    17

    18

    19

    20

    21

    22

    23

    alum.AluDireccion = txtdireccion.Text;

    alum = AlumnoBL.Save(alum);

    MessageBox.Show("Se agrego o Actulizo el Alumno con Id:"+alum.AluId);

    CargarAlumnos();

    Limpiar();

    }

    Tenemos una variable global que representa un alumno, luego la capa de negocio validad si la

    entidad(Alumno) existe o no por medio del id y en base a esto se ejecuta la operacin correspondiente a

    cada caso, tambin en el cdigo encontramos los mtodosValidacionesAlumno() que lo que hace es

    validar que los datos de la entidad Alumno sean los correctos, CargarAlumnos()luego de agregar o

    actualizar un alumno vuelve a cargar los alumnos y Limpiar()que limpia los datos de los textbox.

    Agregar Nota.

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    privatevoidbtnguardarnota_Click(object sender, EventArgs e)

    {

    //compruebo las validaciones

    if(!ValidacionesNotas())

    return;

    //creo una nota nueva

    Nota not = newNota();

    not.AluId = Convert.ToInt32(cbxalumnos.SelectedValue);

    not.MatId = Convert.ToInt32(cbxmaterias.SelectedValue);

    not.NotNota = Convert.ToDecimal(txtnota.Text);

    //si nota para la materia no existe se crea si no muestra mensaje que ya exi

    if(!NotaBL.CreateNota(not))

    {

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    27/29

    15

    16

    17

    18

    19

    20

    21

    MessageBox.Show("Se agrego la Nota con Id:"+ not.NotId);

    Limpiar();

    }

    else

    MessageBox.Show("Ya Existe una Nota del Alumno para la Materia:"+

    cbxmaterias.Text);

    }

    La capa de negocio se encarga de validar si ya existe una nota para una materia de un alumno si no

    existe la agrega y si existe muestra un mensaje que ya existe una nota para la materia, dentro del codigo

    encontramos los metodos ValidacionesNotas() que lo que hace que los datos para agregar una nota

    sean correctos y Limpiar()limpia los datos de los textbox.

    Editar Notas.

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    //variable global de entidad nota

    Nota not = newNota();

    privatevoidbtnguardar_Click(object sender, EventArgs e)

    {

    //compruebo validaciones

    if(!ValidacionesNota())

    return;

    not.NotId = Convert.ToInt32(txtidnota.Text);

    not.AluId = Convert.ToInt32(txtidalumno.Text);

    not.MatId = Convert.ToInt32(txtidmateria.Text);

    not.NotNota = Convert.ToDecimal(txtnota.Text);

    //si nota existe la actualizo

    if(NotaBL.UpdateNota(not))

    {

    http://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.htmlhttp://cristiantorresalfaro.blogspot.com/2012/10/desarrollo-en-capas-net-parte-4-capa.html
  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    28/29

    16

    17

    18

    19

    20

    21

    22

    23

    24

    MessageBox.Show("Se actualizo la nota con Id:"+

    not.NotId);

    CargarGrilla();

    Limpiar();

    }

    else

    MessageBox.Show("No se pudo actualizar la

    nota");

    }

    La capa de negocio se encarga de validar si la nota existe por medio del id, si existe actualiza el registro si

    no muestra mensaje que no se puede actualizar, en el cdigo encontramos los

    mtodos ValidacionesNota() valida que los datos para agregar una nota sean

    correctos,CargarGrilla() carga todas las notas de un alumno en un datagridview y Limpiar()limpia los

    datos de los textbox.

    Conclusin

  • 7/22/2019 Desarrollo en 3 Capas VB.net & C #

    29/29

    A lo largo de los 4 artculos hemos visto como desarrollar un proyecto en capas en .net usando entity

    framework, si bien el ejemplo puede ser un poco sencillo pero puede servir de gua o ejemplo para

    nuestros futuros desarrollos.

    Descargar Proyecto C#

    Descargar Proyecto VB.Net

    http://sdrv.ms/RwAb5Phttp://sdrv.ms/RwAb5Phttp://sdrv.ms/RwAgq4http://sdrv.ms/RwAgq4http://sdrv.ms/RwAgq4http://sdrv.ms/RwAb5P