Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2018
Vladimir Quishpe
Contenido
INTRODUCCION ...................................................................................................................................................3
OBJETIVOS ...........................................................................................................................................................3
MARCO TEORICO .................................................................................................................................................4
Construcción de Aplicaciones en Capas ..........................................................................................................4
Generalidades ..............................................................................................................................................4
CARACTERÍSTICAS ........................................................................................................................................5
APLICACIONES DE UNA CAPA ......................................................................................................................7
APLICACIONES DE DOS CAPAS .....................................................................................................................8
APLICACIONES DE 3 CAPAS ..........................................................................................................................9
APLICACIONES DE N CAPAS ...................................................................................................................... 12
Desarrollo de aplicaciones basadas en componentes .............................................................................. 12
PROCEDIMIENTO .............................................................................................................................................. 13
Capa de Negocio ............................................................................................... Error! Bookmark not defined.
Definición del servicio ...................................................................................... Error! Bookmark not defined.
Implementación del servicio ............................................................................ Error! Bookmark not defined.
Desarrollo del servidor ..................................................................................... Error! Bookmark not defined.
Desarrollo del cliente........................................................................................ Error! Bookmark not defined.
Compilación ...................................................................................................... Error! Bookmark not defined.
Ejecución........................................................................................................... Error! Bookmark not defined.
CONCLUSIONES ................................................................................................................................................ 15
Bibliografía ........................................................................................................................................................ 16
INTRODUCCION
OBJETIVOS
Reconocer modelos de programación avanzados, específicamente la programación
en 4 capas.
MARCO TEORICO
Generalidades
Este cambio radical en los modelos de computación, desde los sistemas monolíticos
basados en mainframe y los tradicionales sistemas cliente-servidor, hacia sistemas
distribuidos multiplataforma altamente modularles, representa el desarrollo rápido y avance
de la investigación en el mundo del desarrollo de aplicaciones, tal y como se pone de
manifiesto en las últimas tendencias de las grandes empresas de tecnología, como Sun con
su estrategia Sun One, o Microsoft con DotNET (.Net).
Mantenimiento y soporte más sencillo (es más sencillo cambiar un componente que
modificar una aplicación monolítica)
Mayor flexibilidad (se pueden añadir nuevos módulos para dotar al sistema de nueva
funcionalidad)
Todas las aplicaciones basadas en n-capas permitirán trabajar con clientes ligeros, tal
como navegadores de Internet, WebTV, Teléfonos Inteligentes, PDAs (Personal Digital
Assistants o Asistentes Personales Digitales) y muchos otros dispositivos preparados
para conectarse a Internet.
CARACTERÍSTICAS
Las aplicaciones que se construyen con una arquitectura multicapa tienen entre otras las
siguientes características:
Transaccionales
Escalables
Disponibilidad
Seguras
Integración
Tipo de interfaz
Las capas dentro de una arquitectura son nada más que un conjunto de servicios
especializados que pueden ser accesibles por múltiples clientes y fácilmente
reutilizables.
Este tipo de arquitectura se caracteriza por tener en una sola asociación lógica y en ella a
la presentación, la lógica de negocios y los datos; que si los ponemos como servicios se
convierten en capas, lo veremos más adelante.
Ejemplos de esta arquitectura son desarrollos realizados en Excel, Access, Fox, entre otros.
Se caracterizan por tener 2 asociaciones lógicas, que prestan servicios y que a la final son
capas.
Esta arquitectura es comúnmente llamada cliente servidor, puesto que también el programa
fuente puede residir en un servidor y muchos cliente pueden acceder a él para ejecutar una
copia del programa.
APLICACIONES DE 3 CAPAS
Una aplicación de tres capas es una aplicación cuya funcionalidad puede ser segmentada
en tres niveles lógicos (capas):
Al ser la primera capa un servicio, se puede inferir que las aplicaciones no solo podrían ser
de escritorio, si quisiéramos que nuestra aplicación tenga una interface web, pues
solamente bastaría con cambiar la capa de presentación y de allí en adelante nada tiene
porque cambiar.
Entonces nuestras páginas web estarían alojadas en un Servidor Web las mismas que se
conectan a la lógica de negocios y de allí a los servicios de datos.
APLICACIONES DE N CAPAS
Podríamos ir separando nuestra aplicación en mas niveles lógicos, por ejemplo, vamos a
querer que nuestra aplicación tenga múltiples interfaces, es decir interface gráfica
(standalone o desktop) y también interface Web.
PROCEDIMIENTO
Capa de presentación
Capa de negocio
Es donde residen los programas que se ejecutan, se reciben las peticiones del usuario
y se envían las respuestas tras el proceso. Se denomina capa de negocio (e incluso de
lógica del negocio) porque es aquí donde se establecen todas las reglas que deben
cumplirse. Esta capa se comunica con la capa de presentación, para recibir las
solicitudes y presentar los resultados, y con la capa de datos, para solicitar al gestor
de base de datos almacenar o recuperar datos de él. También se consideran aquí los
programas de aplicación.
Capa de datos
Es donde residen los datos y es la encargada de acceder a los mismos. Está formada
por uno o más gestores de bases de datos que realizan todo el almacenamiento de
datos, reciben solicitudes de almacenamiento o recuperación de información desde la
capa de negocio.
Todas estas capas pueden residir en un único ordenador, si bien lo más usual es que
haya una multitud de ordenadores en donde reside la capa de presentación (son los
clientes de la arquitectura cliente/servidor). Las capas de negocio y de datos pueden
residir en el mismo ordenador, y si el crecimiento de las necesidades lo aconseja se
pueden separar en dos o más ordenadores. Así, si el tamaño o complejidad de la base
de datos aumenta, se puede separar en varios ordenadores los cuales recibirán las
peticiones del ordenador en que resida la capa de negocio.
CONCLUSIONES
La programación en capas ha sido una de las últimas tendencias en cuanto a software
comercial se refiere, es una tendencia que bien aplicada puede resultar en un desarrollo de
software eficiente.
Bibliografía
Valdivia, J., & Perez, D. (2015). Comunicacion entre procesos Sockets. Huanuco-
Peru: Universidad Nacional Hermilio Valdizan.
ANEXOS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Entidades;
using Negocios;
if (nResultado != 1)
{
Response.Write("<script>windows.alert('El producto fue Borrado')</script>");
}
else
{
Response.Write("<script>window.alert('El producto fue borrado')</script>");
}
}
if (nResultado != 1)
{
Response.Write("<script>windows.alert('El producto fue modificado')</script>");
}
else
{
Response.Write("<script>window.alert('El producto NO fue
modificado')</script>");
}
}
EscondeControl();
ds = objNegProducto.ListadoProductos();
if (ds.Tables[0].Rows.Count > 0)
{
grvListadoProducto.DataSource = ds.Tables[0];
grvListadoProducto.DataBind();
pnlListadoProductos.Visible = true;
}
else
Response.Write("<script>windows.alert('No existen productos en el
sistema')</script>");
}
btnBorrarProducto.Visible = true;
btnModificarProducto.Visible = true;
ds = objNegProducto.SeleccionarProducto(objEntProducto.IdProducto);
if (ds.Tables[0].Rows.Count > 0)
{
ObjetoATextBox(ds);
pnlAltas.Visible = true;
btnGrabarProducto.Visible = false;
}
}
}
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<style type="text/css">
.auto-style1 {
margin-bottom: 0px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
ALMACEN
<br />
<br />
<asp:Button ID="btnNuevoProducto" runat="server" OnClick="btnNuevoProducto_Click"
Text="Nuevo" />
<asp:Button ID="btnListadoProducto" runat="server"
OnClick="btnListadoProducto_Click" style="height: 29px" Text="Listado" />
<br />
<br />
<br />
<asp:Panel ID="pnlListadoProductos" runat="server" BackColor="#999966"
Height="271px">
<asp:GridView ID="grvListadoProducto" runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px"
CellPadding="4" DataKeyNames="IdProducto" GridLines="Horizontal" HorizontalAlign="Center"
OnSelectedIndexChanged="grvListadoProducto_SelectedIndexChanged1" Width="90%">
<Columns>
<asp:BoundField DataField="NumeroProducto" HeaderText="Numero" />
<asp:BoundField DataField="NombreProducto" HeaderText="Nombre" />
<asp:CommandField ShowSelectButton="True" />
</Columns>
<FooterStyle BackColor="White" ForeColor="#333333" />
<HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center"
/>
<RowStyle BackColor="White" ForeColor="#333333" />
<SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F7F7F7" />
<SortedAscendingHeaderStyle BackColor="#487575" />
<SortedDescendingCellStyle BackColor="#E5E5E5" />
<SortedDescendingHeaderStyle BackColor="#275353" />
</asp:GridView>
</asp:Panel>
<br />
<br />
<asp:Panel ID="pnlAltas" runat="server" BackColor="Gray" Height="293px">
<br />
<asp:Label ID="lblOpcion" runat="server" Text="ALTAS"></asp:Label>
<br />
<br />
<br />
<asp:Label ID="lblNumeroProducto" runat="server" Text="No. Producto:
"></asp:Label>
<asp:TextBox ID="tbNumeroProducto" runat="server"></asp:TextBox>
<br />
<br />
<asp:Label ID="lblNombreProducto" runat="server" Text="Nombre Producto:
"></asp:Label>
<asp:TextBox ID="tbNombreProducto" runat="server" CssClass="auto-
style1"></asp:TextBox>
<br />
<br />
<asp:Label ID="lblMensaje" runat="server"></asp:Label>
<br />
<br />
<asp:Button ID="btnGrabarProducto" runat="server"
OnClick="btnGrabarProducto_Click" Text="Grabar" />
<asp:Button ID="btnBorrarProducto" runat="server"
OnClick="btnBorrarProducto_Click" Text="Borrar" />
<asp:Button ID="btnModificarProducto" runat="server"
OnClick="btnModificarProducto_Click" Text="Modificar" />
<asp:Button ID="btnCancelar" runat="server" OnClick="btnCancelar_Click1"
Text="Cancelar" />
&n
bsp; &nbs
p;
</asp:Panel>
<br />
<asp:SqlDataSource ID="CadenaConexion" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT
[NumeroProducto], [IdProducto], [NombreProducto] FROM [tbProductos]"></asp:SqlDataSource>
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace Datos
{
public class D_ConexionBD
{
public SqlConnection Conexion;
public D_ConexionBD()
{
Conexion = new
SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);
}
{
try
{
if (Conexion.State == ConnectionState.Broken || Conexion.State ==
ConnectionState.Closed)
{
Conexion.Open();
}
}
catch (Exception e)
{
throw new Exception("Error al abrir la conexión", e);
}
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using Entidades;
namespace Datos
{
public class D_Productos : D_ConexionBD
{
public D_Productos() { }
cmd.Parameters.AddWithValue("@Accion", pAccion);
cmd.Parameters.AddWithValue("@IdProducto", objE_Producto.IdProducto);
cmd.Parameters.AddWithValue("@NumeroProducto", objE_Producto.NumeroProducto);
cmd.Parameters.AddWithValue("@NombreProducto", objE_Producto.NombreProducto);
try
{
AbrirConexion();
Resultado = cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception("Error al Almacenar, Borrar o Modificar datos", e); ;
}
finally
{
CerrarConexion();
cmd.Dispose();
}
return Resultado;
da.SelectCommand = cmd;
da.Fill(ds);
}
catch (Exception ex)
{
throw new Exception("Datos Productos", ex);
}
finally
{
Conexion.Close();
cmd.Dispose();
}
return ds;
}
cmd.Parameters.AddWithValue("@IdProducto", pIdProducto);
cmd.CommandText = "[dbo].[SeleccionarProducto]";
da.SelectCommand = cmd;
da.Fill(ds);
}
catch (Exception ex)
{
throw new Exception("Datos Producto", ex);
}
finally
{
Conexion.Close();
cmd.Dispose();
}
return ds;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Entidades
{
public class E_Producto
{
private int _IdProducto;
public E_Producto()
{
_IdProducto = 0;
_NumeroProducto = string.Empty;
_NombreProducto = string.Empty;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Datos;
using Entidades;
using System.Data;
namespace Negocios
{
public class N_Productos
{
D_Productos objNegocioProducto = new D_Productos();
}
}