Post on 22-Feb-2018
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