Ejemplo de Aplicacion Usando Arquitectura 3 Capas con C#.net y vs 2008

5 12 2009

1.- Conceptos Basicos

  • La programación por capas es un estilo de programación en el que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño; un ejemplo básico de esto consiste en separar la capa de datos de la capa de presentación al usuario.

Tres capas.PNG

  • La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en caso de que sobrevenga algún cambio, sólo se ataca al nivel requerido sin tener que revisar entre código mezclado. Un buen ejemplo de este método de programación sería el modelo de interconexión de sistemas abiertos.
  • Además, permite distribuir el trabajo de creación de una aplicación por niveles; de este modo, cada grupo de trabajo está totalmente abstraído del resto de niveles, de forma que basta con conocer la API que existe entre niveles.
  • En el diseño de sistemas informáticos actual se suele usar las arquitecturas multinivel o Programación por capas. En dichas arquitecturas a cada nivel se le confía una misión simple, lo que permite el diseño de arquitecturas escalables (que pueden ampliarse con facilidad en caso de que las necesidades aumenten).
  • El diseño más utilizado actualmente es el diseño en tres niveles (o en tres capas).

2.- Capas y Niveles

1.- Capa de presentación: es la que ve el usuario (también se la denomina «capa de usuario»), presenta el sistema al usuario, le comunica la información y captura la información del usuario en un mínimo de proceso (realiza un filtrado previo para comprobar que no hay errores de formato). Esta capa se comunica únicamente con la capa de negocio. También es conocida como interfaz gráfica y debe tener la característica de ser «amigable» (entendible y fácil de usar) para el usuario.

2.- 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 para almacenar o recuperar datos de él. También se consideran aquí los programas de aplicación.

3.- 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.
  • Si, por el contrario, fuese la complejidad en la capa de negocio lo que obligase a la separación, esta capa de negocio podría residir en uno o más ordenadores que realizarían solicitudes a una única base de datos. En sistemas muy complejos se llega a tener una serie de ordenadores sobre los cuales corre la capa de negocio, y otra serie de ordenadores sobre los cuales corre la base de datos.

3.- Aclaraciones

  • En una arquitectura de tres niveles, los términos «capas» y «niveles» no significan lo mismo ni son similares.
  • El término «capa» hace referencia a la forma como una solución es segmentada desde el punto de vista lógico: Presentación/ Lógica de Negocio/ Datos.
  • En cambio, el término «nivel» corresponde a la forma en que las capas lógicas se encuentran distribuidas de forma física. Por ejemplo:
  • Una solución de tres capas (presentación, lógica del negocio, datos) que residen en un solo ordenador (Presentación+lógica+datos). Se dice que la arquitectura de la solución es de tres capas y un nivel.
  • Una solución de tres capas (presentación, lógica del negocio, datos) que residen en dos ordenadores (presentación+lógica, lógica+datos). Se dice que la arquitectura de la solución es de tres capas y dos niveles.
  • Una solución de tres capas (presentación, lógica del negocio, datos) que residen en tres ordenadores (presentación, lógica, datos). La arquitectura que la define es: solución de tres capas y tres niveles.

Aca les dejo la Aplicacion echa en c# con vs 2008(Aplicacion de ejemplo de Dessarrollador 5 Estrellas xD).
usa base de datos mysql o sql2005 solo tiene q cambiar en el arcvhivo app.config(no olviden crear antes la base de datos «dce05_ejemplos_estrella1» ):
microsoft sql server :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!-- El proveedor ADO.NET  -->
<add key="PROVEEDOR_ADONET" value="System.Data.SqlClient" />
<!-- La cadena de conexion -->
<add key="CADENA_CONEXION" value="Data Source=.\SQLEXPRESS;
DataBase=dce05_ejemplos_estrella1;Connect Timeout=30;Integrated Security=True"/>
</appSettings>
</configuration>

Mysql:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!-- El proveedor ADO.NET  -->
<add key="PROVEEDOR_ADONET" value="MySql.Data.MySqlClient" />
<!-- La cadena de conexion -->
<add key="CADENA_CONEXION" value="Server=localhost;Database=dce05_ejemplos_estrella1;UID=root;Password="/>
</appSettings>
</configuration>

Descargar Ejemplo

Referencias

Programacion por capas


Acciones

Information

13 responses

5 12 2009
15 12 2009
Alvaro

Gracias por el artículo, me ha venido muy bien. Tengo una duda sobre las aplicaciones por capas que puede que me puedas resolver. Quiero diseñar una aplicación en capas que lea en una base de datos los valores con el campo Activo = true solo, y los muestre al usuario. En cambio si el usuario modifica algo, en vez de modificar directamente desactiva esa fila y crea una nueva, para lo cual hay que consultar no solo las activas sino todas. La pregunta es, como estructuro las capas? Yo lo habia pensado de la siguiente manera:
DAL: Traer datos activos a DataTables y todos los datos, guardar datos
BLL: Comprobar los valores, Realizar las desactivaciones y crear las nuevas filas
Presentacion:mostrar los datos.

Me surge la duda de si realizar las desactivaciones y crear las nuevas filas en los datatables va en BLL o iria en DAL y en ese caso que iría en BLL

15 12 2009
albeferz

Hola Alvaro.La estructura de capas:UI(presentacion),BLL(Logica negocios),DLL(Acceso a datos) refiriendose a 3 capas, La desactivacion de las filas(progamando dicha desactivacion en el GridView si lo usaras para mostrar los datos) iria en la BLL,es decir tendrias una clase donde programes el comportamiento del GRidview… y segun eso deveras enviar los datos selecionacionados,a la DALL para q luego sean procesados .

15 12 2009
Alfonso

Gracias el articulo es muy interesante. Pero no he podido descargar la Aplicación de ejemplo. El link esta roto?

16 12 2009
albeferz

Alfonso ya cambie el link, xq estaba haciendo referenfia a otro ejemplo,ahor aya podras descargarlo, aka t dejo los links:
http://www.mediafire.com/?ihzjzm5mtmg
http://www.mediafire.com/file/ihzjzm5mtmg/Ejemplo_arq_3_capas.rar

15 12 2009
Alvaro

Hola de nuevo. Lo primero gracias por contestar tan pronto. Y lo segundo perdón por la insistencia, pero estoy empezando en esto de la programación y hay muchas cosas que se me escapan.
Por lo que me explicas todo el entramado iría en la BLL, tanto de validación, desactivación, etc, mientras que la DALL solo envía y recibe los datos y la UI los presenta y entrega los que se introduzcan en textbox, etc a la capa BLL. De esta forma, las capas DAL y UI son independientes a lo que se haga en la BLL. Lo unico, no quedaría una BLL demasiado extensa y posiblemente algo liosa?

16 12 2009
albeferz

holas Alvaro, lo que es cosa de validaciones de campos ,activaciones es muchas veces recomendable colocarlos en la UI, pero tambien aveces en la BLL, por eso te recomendari usar hambos, ya que habran validaciones que se podran controlar directamente con la UI(q no ingreses caracteres donde debes de ingrsar numero, activar un text, etc), y otras como en el ejemplo anterios que es preferible hacerlo en la BLL.Lo que dices de la BLL de liosa, si es lo mas probable ya q contiene toda la logica del negocio, pero en raras ocaciones pero en muya raras ocaciones es decir salvo q no kede otra opcion, puedes colocar parte de la logica de negocio(aprobechando la velocidad de procesamiento y si vas a trabajar cn volumenes grandes de datos),en la base de datos(programando procedimientos almacenados, ect).

7 01 2010
Elena

Hola yo quiero desarrollar una aplicacion web en tres capas con c#.net 2008 & asp.net 3.5 y sql server 2008, me podrian pasar la estructura del webconfig para la conexion a la bd y como podria hacer una funcion para insertar datos usando el modelo de tres capas. gracias

7 02 2010
albeferz

En este enlace encontraras lo q buscas , spero t sirva
http://blog.soreygarcia.me/2010/01/desarrollo-por-capas-en-net.html

20 05 2010
Jotrujil

Como sería el script de conexiòn en acces 2007

1 04 2011
CESAR W GRIMALDOS

HOLA A TODOS, NECESITO UNA AYUDA
ESTOY HACIENDO UN PROYECTO EN C#, TENGO 5 CAPAS (MARKETING, MARQUETIN NEGOCIO, MARKETINGMANEJODATOS, MARKETINACCESODATOS, MARKETINGENTIDADES, ENLA CAPA ENTIDADES TENGO O UNA CLASE LLAMADA GENEROENTITY Y TIENE ESTE CODIGO:
using System;

namespace Marketing.Entity
{
public class GeneroEntity
{
public GeneroEntity(Int32 id, string desc)
{
this.IdGenero = id;
this.Descripcion = desc;
}

public Int32 IdGenero { get; set; }
public string Descripcion { get; set; }
}
}

AHORA EN LA CAPA MANEJO DE DATOS TENGO UNA CLASE LLAMADA GENERODALC Y TIENE ESTE COD:

using System.Data;
using System;
using System.Text;
using System.Collections.Generic;
using Marketing.Entity;

namespace Marketing.DALC
{
public class GeneroDALC
{

public static List ObtenerTodos()
{
List lista = new List()
{
new GeneroEntity(1, «Masculino»),
new GeneroEntity(2, «Femenino»),
new GeneroEntity(3, «Comunidad LBG»)
};

return lista;
}
}
}

EN UN FOR QUE ESTOY DISEÑANDO TENGO UN COMBOBOX QUE ME DEBE MOSTRAR LOS DATOS DEL GENERO (MASCULINO ….)
PERO LAS REFERENCIAS QUE TENGO EN EL FORM SON A MARKETINGNEGOCIO Y A MARKETINGENTIDADES
DONDE TENGO EL PROBLEMA QUE SE QUE EN LA CAPA NEGOCIO DEBO CREAR UNA CLASE CON EL NOMBRE GENERONEGOCIO, Y ACA DEBO LLAMAR LOS METODOS TRAERTODO DE LA CLASE DALC Y DE LA CLASE ENTITY – GENEROENTITY, Y CUANDO CORRO EL FORM NO ME MUESTRA LOS DATOS DEL COMBO

ALGUIEN ME PUEDE ECHAR UNA AYUDA CON ESTO….LO AGRADECERIA YA QUE ESTE PROCESO LO TENGO QUE HACER CON 3 TABLAS MAS

SALUDOS A TODOS

14 06 2011
Sergio

Muy buen tutorial, la unica duda que tengo es: ¿ en que parte del codigo se debe conectar a la base de datos para que solo se realice al hacer la operación y luego se desconecte?
La sentencia es: AccesoDatos.Conexion.IniciarSesion(«.», «GPA-Ser», «sa», «sa»);
A mi entender solo lo tiene que hacer la capa de acceso a datos cuando sea necesario, sin que quede la conexion constantemente.
Muchas gracias. Saludos.
Sergio

29 09 2011
Charles

Buen artículo, felicitaciones.

Replica a albeferz Cancelar la respuesta