Desarrollo de Aplicaciones n Capas

download Desarrollo de Aplicaciones n Capas

of 25

Transcript of Desarrollo de Aplicaciones n Capas

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    1/25

    Desarrollo de Aplicaciones N-CapasPublicado enagosto 21, 2012

    El desarrollo de una aplicacin N-Capas es bsicamente un estilo de programacin en el cual se

    separan lgicamente cada uno de los elementos de la aplicacin, esto es, cada una de las capas

    en la que estar formada nuestra aplicacin.

    Este es nuestro diagrama de base de datos.

    Estos son los procedimientos utilizados.

    1

    2

    34

    5

    6

    78

    9

    1011

    12

    13

    1415

    USE TiendaGO

    CREATEPROCEDUREListarCategoriasASSELECTIdCategoria [Id],

    ISNULL(CodigoCategoria,'') [Codigo],ISNULL(Nombre,'')[Nombre],

    ISNULL(Observacion,'')[Observacion]FROMCategoriaGO

    CREATEPROCEDURETraerCategoriaPorId@ID intASSELECTIdCategoria [Id],

    ISNULL(CodigoCategoria,'') [Codigo],ISNULL(Nombre,'')[Nombre],

    http://donaldsullon.wordpress.com/2012/08/21/desarrollo-de-aplicaciones-n-capas/http://donaldsullon.wordpress.com/2012/08/21/desarrollo-de-aplicaciones-n-capas/http://donaldsullon.wordpress.com/2012/08/21/desarrollo-de-aplicaciones-n-capas/http://donaldsullon.wordpress.com/2012/08/21/desarrollo-de-aplicaciones-n-capas/
  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    2/25

    1617

    18

    1920

    2122

    2324

    25

    2627

    28

    2930

    31

    32

    3334

    3536

    37

    3839

    40

    41

    4243

    44

    4546

    47

    4849

    ISNULL(Observacion,'')[Observacion]FROMCategoriaWHEREIdCategoria = @IDGO

    CREATEPROCEDUREInsertarCategoria@CODIGO VARCHAR(8),@NOMBRE VARCHAR(100),@OBSERVACION TEXT

    ASINSERTINTOCategoria(CodigoCategoria,Nombre,Observacion) VALUES(@CODIGO,@NOMBRE,@OBSERVACION) GO

    CREATEPROCEDUREActualizarCategoria@ID INT,@CODIGO VARCHAR(8),@NOMBRE VARCHAR(100),@OBSERVACION TEXT

    ASUPDATECategoria SETCodigoCategoria = @CODIGO,

    Nombre = @NOMBRE, Observacion = @OBSERVACIONWHEREIdCategoria = @IDGO

    CREATEPROCEDUREEliminarCategoria@ID INT

    ASDELETEFROMCategoriaWHEREIdCategoria = @IDGO

    1) Crear una solucin en blanco

    @.- File => New =>Project

    @.- Other Project Types => Visual Studio Solutions => Blank Solution

    @.- Nombre de la solucin Tienda.

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    3/25

    1) Agregar a la solucin las carpetas Modelo y Aplicaciones.

    @.- Clic derecho sobre la solucin => Add =>New Solution Folder

    @.- Asignar el nombre Modelo

    @.- Clic derecho sobre la solucin => Add =>New Solution Folder

    @.- Asignar el nombre Aplicaciones

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    4/25

    1) Crear la capa de entidad.

    @.- Sobre la Carpeta Modelo, clic derecho => Add => New Project

    @.- Seleccione Windows => Class Library como tipo de proyecto.

    @.- Asigne el nombre Tienda.Entidades

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    5/25

    @.- Elimine la clase que se crea por defecto (Class1.cs)

    @.- Agregue un nuevo Item al proyecto, clic derecho => Add => New Item

    @.- Seleccione e tipo Class y asigne el nombre Categoria

    @.- Para que la clase sea visible para los dems proyectos le agregamos el modificador

    public

    1 publicclassCategoria;

    @.- Creamos los campos y mtodos de la clase.

    12

    3

    45

    6

    7

    8

    int_id;string_codigo;string_nombre;string_observacion;

    publicintId{

    get{ return_id; }set{ _id = value; }

    }

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    6/25

    910

    11

    1213

    1415

    1617

    18

    1920

    21

    2223

    24

    25

    2627

    28

    publicstringCodigo{

    get{ return_codigo; }set{ _codigo = value; }

    }

    publicstringNombre{

    get{ return_nombre; }set{ _nombre = value; }

    }

    publicstringObservacion{

    get{ return_observacion; }set{ _observacion = value; }

    }

    @.- Creamos los constructores de la clase.

    12

    3

    4

    5

    67

    8

    910

    11

    1213

    14

    1516

    171819

    20

    21

    2223

    24

    publicCategoria(intId, stringCodigo,stringNombre, stringObservacion)

    {this._id = Id;this._codigo = Codigo;this._nombre = Nombre;this._observacion = Observacion;

    }

    publicCategoria(intId, stringCodigo,stringNombre): this(Id, Codigo, Nombre, "")

    {}

    publicCategoria(intId, stringNombre): this(Id, "", Nombre, "")

    {}

    publicCategoria(): this(0,"", "", "")

    {}

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    7/25

    2) Crear la capa de Datos.

    @.- Sobre la Carpeta Modelo, clic derecho => Add => New Project

    @.- Seleccione Windows => Class Library como tipo de proyecto.

    @.- Asigne el nombre Tienda.Datos

    @.- Elimine la clase que se crea por defecto (Class1.cs)

    @.- Agregue un nuevo Item al proyecto, clic derecho => Add => New Item

    @.- Seleccione el tipo Class y asigne el nombre DAOCategoria

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    8/25

    @.- Para que la clase sea visible para los dems proyectos le agregamos el modificador

    public

    1 publicclassDAOCategoria;@.- Agregue la referencia al proyecto:

    Proyecto Tienda.Datos, clic derecho => Add Referece, Seleccione la ficha Projects, luego

    ubique el proyecto Tienda.Entidades => Ok

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    9/25

    @.- Importamos la referencia para esto agregamos la siguiente instruccin.

    1 usingTienda.Entidades;@.- Vamos a crear una propiedad que tome la cadena de conexin a la base de datos, esta

    cadena de conexin ser definida en el archivo de configuracin de la aplicacin sea web

    (webconfig) o Windows (AppConfig), para tomar esta configuracin hacemos referencia a

    System.Configuration:

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    10/25

    Proyecto Tienda.Datos, clic derecho => Add Referece, Seleccione la ficha .NET, luego

    ubique System.Configuration.

    @.- Importamos la referencia para esto agregamos la siguiente instruccin.

    1 usingSystem.Configuration;

    @.- Creamos una propiedad llamada CadenaConexion, para este caso preguntamos si es que

    el campo _cadenaConexion recuper el valor de un key llamado Conex que estar definido

    en el archivo de configuracin.

    1

    23

    4

    56

    7

    89

    10

    11

    1213

    14

    15

    string_cadenaConexion;

    publicstringCadenaConexion{

    get{

    if(_cadenaConexion == null)

    { _cadenaConexion = ConfigurationManager.ConnectionStrings["Conex"].ConnectionString;

    }return_cadenaConexion;

    }set{ _cadenaConexion = value; }

    }

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    11/25

    @.- Ahora creamos los mtodos de acceso a datos, tales como Listar, Insertar, Eliminar,

    Actualizar.

    1

    234

    5

    67

    8

    910

    11

    12

    1314

    15

    1617

    1819

    20

    2122

    23

    24

    2526

    27

    2829

    30

    3132

    33

    34

    3536

    37

    3839

    40

    41

    4243

    publicList Listar()

    { List lista = newList();

    using(SqlConnection con = newSqlConnection(CadenaConexion)){

    con.Open();SqlCommand cmd = newSqlCommand("ListarCategorias", con);cmd.CommandType = CommandType.StoredProcedure;SqlDataReader dr = cmd.ExecuteReader();if(dr != null&& dr.HasRows){

    while(dr.Read()){

    Categoria c = newCategoria((int)dr["Id"],(string)dr["Codigo"], (string)dr["Nombre"],(string)dr["Observacion"]);

    lista.Add(c);}

    }}returnlista;

    }

    publicCategoria TraerPorId(intId){

    Categoria Categoria = newCategoria();using(SqlConnection con = newSqlConnection(CadenaConexion))

    {con.Open();SqlCommand cmd = newSqlCommand("TraerCategoriaPorId", con);cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@ID", Id);SqlDataReader dr = cmd.ExecuteReader();if(dr != null&& dr.HasRows){

    dr.Read();Categoria = newCategoria((int)dr["Id"],

    (string)dr["Codigo"], (string)dr["Nombre"],(string)dr["Observacion"]);

    }

    }returnCategoria;}

    publicintInsertar(Categoria Categoria){

    intn = -1;using(SqlConnection con = newSqlConnection(CadenaConexion)){

    con.Open();

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    12/25

    4445

    46

    4748

    4950

    5152

    53

    5455

    56

    5758

    59

    60

    6162

    6364

    65

    6667

    68

    69

    7071

    72

    7374

    75

    7677

    78

    79

    8081

    82

    8384

    85

    8687

    88

    89

    90

    SqlCommand cmd = newSqlCommand("InsertarCategoria", con);cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@Codigo", Categoria.Codigo);cmd.Parameters.AddWithValue("@Nombre", Categoria.Nombre);cmd.Parameters.AddWithValue("@Observacion", Categoria.Observacion);n = cmd.ExecuteNonQuery();

    }returnn;

    }

    publicintActualizar(Categoria Categoria){

    intn = -1;using(SqlConnection con = newSqlConnection(CadenaConexion)){

    con.Open();SqlCommand cmd = newSqlCommand("ActualizarCategoria", con);cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@Id", Categoria.Id);cmd.Parameters.AddWithValue("@Codigo", Categoria.Codigo);

    cmd.Parameters.AddWithValue("@Nombre", Categoria.Nombre);cmd.Parameters.AddWithValue("@Observacion", Categoria.Observacion);n = cmd.ExecuteNonQuery();

    }returnn;

    }

    publicintEliminar(intId){

    intn = -1;using(SqlConnection con = newSqlConnection(CadenaConexion)){

    con.Open();

    SqlCommand cmd = newSqlCommand("EliminarCategoria", con);cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@Id", Id);n = cmd.ExecuteNonQuery();

    }returnn;

    }

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    13/25

    91

    3) Crear la capa de Negocio.

    @.- Sobre la Carpeta Modelo, clic derecho => Add => New Project

    @.- Seleccione Windows => Class Library como tipo de proyecto.

    @.- Asigne el nombre Tienda.Negocio

    @.- Elimine la clase que se crea por defecto (Class1.cs)

    @.- Agregue un nuevo Item al proyecto, clic derecho => Add => New Item

    @.- Seleccione el tipo Class y asigne el nombre BLCategoria

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    14/25

    @.- Para que la clase sea visible para los dems proyectos le agregamos el modificador

    public

    1 publicclassBLCategoria@) Agregue la referencia al proyecto:

    Tienda.Datos, clic derecho => Add Referece, Seleccione la ficha Projects, luego seleccione

    el proyecto Tienda.Entidades y Tienda.Datos => Ok

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    15/25

    @.- Importamos la referencia para esto agregamos la siguiente instruccin.

    1

    2

    usingTienda.Entidades;usingTienda.Datos;

    @.- Creamos ahora nuestra lgica de negocio, para esto creamos los mtodos tales como

    Listar, TraerPorId, Insertar, Eliminar, Actualizar.

    1

    2

    34

    5

    67

    8

    9

    1011

    12

    1314

    15

    1617

    18

    1920

    publicList Listar(){DAOCategoria daCategoria = newDAOCategoria();returndaCategoria.Listar();

    }

    publicCategoria TraerPorId(intId){

    DAOCategoria daCategoria = newDAOCategoria();returndaCategoria.TraerPorId(Id);

    }

    publicintInsertar(Categoria Categoria)

    { DAOCategoria daCategoria = newDAOCategoria();returndaCategoria.Insertar(Categoria);

    }

    publicintActualizar(Categoria Categoria){

    DAOCategoria daCategoria = newDAOCategoria();returndaCategoria.Actualizar(Categoria);

    }

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    16/25

    2122

    23

    2425

    2627

    2829

    publicintEliminar(intId){

    DAOCategoria daCategoria = newDAOCategoria();returndaCategoria.Eliminar(Id);

    }

    3) Crear la Aplicacin.

    @.- Sobre la Carpeta Aplicaciones, clic derecho => Add => New Project

    @.- Seleccione Windows => Windows Forms Application como tipo de proyecto.

    @.- Asigne el nombre TiendaWindows

    @.- Disee el siguiente formulario

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    17/25

    GroupBox

    gbDatos; gbControl => (gbDatos Contiene a todos los TextBox, gbControl contiene a los Button)

    TextBox

    txtCodigo; txtNombre; txtObservacion =>(txtObservacion debera mostrarse multilinea)

    Button

    btnNuevo, btnGrabar, btnEditar, btnEliminar, btnSalir

    DataGridView

    dgvDatos

    @.- Personalize el control dgvDatos, agregue las columnas Id, Cdigo, Nombre,

    Observacin. Modifique la propiedad Visible=False de la columna Id.

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    18/25

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    19/25

    @.- El diseo del formulario debera mostrar el siguiente aspecto.

    @) Agregue la referencia al proyecto:

    Proyecto TiendaWindows, clic derecho => Add Referece, Seleccione la ficha Projects, luego

    seleccione el proyecto Tienda.Entidades y Tienda.Negocio => Ok

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    20/25

    @.- Agregue un nuevo Item al proyecto, clic derecho => Add => New Item

    @.- Seleccione e tipo Application Configuration File, el nombre ser por defecto

    App.config.

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    21/25

    @.- Abrimos el archivo App.config y agregamos la siguiente instruccin despus de

    .

    1

    234

    @.- Importamos la referencia para esto agregamos la siguiente instruccin.

    12

    usingTienda.Entidades;usingTienda.Negocio;

    @.- Declaramos las variables generales

    1

    23

    4

    List lista = null;BLCategoria blCategoria = newBLCategoria();Categoria c;bool_nuevo = false;

    @.- Creamos un mtodo que permita activar los controles

    12

    3

    4

    5

    67

    89

    10

    privatevoidActivarControlDatos(Control Contenedor, boolEstado){

    foreach(varitem inContenedor.Controls){

    if(item.GetType() == typeof(TextBox))

    { ((TextBox)item).Enabled = Estado;}

    }}

    @.- Creamos un mtodo que limpie los controles

    1

    23

    4

    5

    67

    8

    910

    privatevoidLimpiarControl(Control Contenedor){

    foreach(varitem inContenedor.Controls)

    { if(item.GetType() == typeof(TextBox)){

    ((TextBox)item).Clear();}

    }}

    @.- Creamos un mtodo que Active los Botones

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    22/25

    12

    3

    45

    67

    privatevoidActivarButton(boolEstado){

    btnNuevo.Enabled = Estado;btnGrabar.Enabled = !Estado;btnEliminar.Enabled = Estado;btnSalir.Enabled = Estado;

    }

    @.- Creamos el mtodo CargarDatos

    1

    2

    34

    5

    67

    8910

    1112

    privatevoidCargarDatos(){

    if(lista.Count > 0){

    dgvDatos.Rows.Clear();for(inti = 0; i < lista.Count; i++){

    dgvDatos.Rows.Add(lista[i].Id, lista[i].Codigo,lista[i].Nombre, lista[i].Observacion);

    }}

    }

    @.- Botn Nuevo

    12

    3

    456

    7

    89

    privatevoidbtnNuevo_Click(objectsender, EventArgs e){

    _nuevo = true;

    ActivarControlDatos(gbDatos, true);btnEditar.Text = "Cancelar";ActivarButton(false);LimpiarControl(gbDatos);txtCodigo.Focus();

    }

    @.- Botn Grabar

    1

    2

    34

    5

    67

    89

    10

    privatevoidbtnGrabar_Click(objectsender, EventArgs e){

    intn = -1;

    if(_nuevo){

    c = newCategoria(0, txtCodigo.Text,txtNombre.Text, txtObservacion.Text);

    n = blCategoria.Insertar(c);}else{

    c.Codigo = txtCodigo.Text;c.Nombre = txtNombre.Text;

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    23/25

    1112

    13

    1415

    1617

    1819

    20

    2122

    23

    2425

    26

    27

    2829

    3031

    c.Observacion = txtObservacion.Text;n = blCategoria.Actualizar(c);

    }if(n > 0){

    MessageBox.Show("Datos grabados correctamente", "Aviso",MessageBoxButtons.OK, MessageBoxIcon.Information);

    ActivarControlDatos(gbDatos, false);ActivarButton(true);dgvDatos.Enabled = true;LimpiarControl(gbDatos);btnEditar.Text = "Editar";lista = blCategoria.Listar();CargarDatos();

    }else{ MessageBox.Show("Error al grabar", "Aviso",

    MessageBoxButtons.OK, MessageBoxIcon.Error); }}

    @.- Botn Editar

    1

    2

    3

    4

    56

    7

    89

    10

    1112

    13

    1415

    161718

    19

    20

    2122

    23

    privatevoidbtnEditar_Click(objectsender, EventArgs e){

    if(btnEditar.Text == "Cancelar"){

    _nuevo = false;LimpiarControl(gbDatos);ActivarControlDatos(gbDatos, false);ActivarButton(true);dgvDatos.Enabled = true;btnEditar.Text = "Editar";

    }else{

    if(dgvDatos.RowCount > 0){

    c = blCategoria.TraerPorId((int)dgvDatos[0, dgvDatos.CurrentRow.Index].Value);

    txtCodigo.Text = c.Codigo;txtNombre.Text = c.Nombre;txtObservacion.Text = c.Observacion;ActivarControlDatos(gbDatos, true);ActivarButton(false);dgvDatos.Enabled = false;btnEditar.Text = "Cancelar";

    }}

    }

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    24/25

    2425

    26

    27

    @.- Botn Eliminar

    1

    23

    4

    5

    67

    8

    910

    111213

    1415

    16

    1718

    19

    20

    21

    2223

    24

    25

    privatevoidbtnEliminar_Click(objectsender, EventArgs e){

    if(dgvDatos.RowCount > 0){

    c = blCategoria.TraerPorId((int)dgvDatos[0, dgvDatos.CurrentRow.Index].Value);

    DialogResult rpta =MessageBox.Show("Desea eliminar el registro", "Eliminar",MessageBoxButtons.YesNo, MessageBoxIcon.Question);

    if(rpta == System.Windows.Forms.DialogResult.Yes){intn = blCategoria.Eliminar(c.Id);if(n > 0){

    MessageBox.Show("Registro eliminado", "Aviso",MessageBoxButtons.OK, MessageBoxIcon.Information);

    lista = blCategoria.Listar();CargarDatos();

    }else{ MessageBox.Show("Error al eliminar", "Aviso",

    MessageBoxButtons.OK, MessageBoxIcon.Error); }}

    }}

    @.- Botn Salir

    }

    12

    3

    4

    privatevoidbtnSalir_Click(objectsender, EventArgs e){

    Close();

    }

    @.- Ejecutar la Aplicacin

  • 7/24/2019 Desarrollo de Aplicaciones n Capas

    25/25