Datapayasadas

Julio 17, 2008

Aplicaciones en 3 capas

Archivado en: C# — Etiquetas:, , , — pabloide86 @ 6:11 pm

Buenassssamigos…son varias las consultas que me han llegado sobre como realizar una aplicación utilizando la famosa arquitectura de 3 capas. Voy a intentar ser lo mas breve posible para que se entienda el concepto y luego les dejo un ejemplo con codigo fuente para descargar!

La separación en capas es mas un concepto lógico que físico. Se trata de dividir a un programa, o mejor dicho agrupar componentes que cumplen funciones similares para lograr que el código sea mas compacto , para eliminar problemas a la hora de introducir una modificación, para tener mas flexibilidad a la hora de cambiar las partes que componen un sistema, etc.

En la arquitectura de 3 capas generalmente nos encontramos con:

  • Capa de presentación: es la encargada de interactuar con el usuario
  • Capa de negocio: es la encargada de gestionar todas las reglas que rigen a nuestro sistema
  • Capa de acceso a datos: es la encargada de manejar la lógica de cómo se persisten los datos en algún tipo de almacenamiento

Éstas son solo 3 pero puede haber cuantas capas se necesiten. Algunos sistemas pueden tener solo 2 y otros pueden necesitar 7 o mas!

En sistemas diseñados con tecnología orientada a objetos además podemos encontrar con una capa de entidades que es la que contiene todos los objetos de nuestro negocio que se irán pasando de capa en capa.

Pero entonces…¿¡¿como funciona?!?

Es sencillo. En la capa de presentación solamente vamos a poner el código necesario para hacer funcionar la interfaz de usuario: como manejar controles, como llenar una grilla o un TextBox, como navegar por las diferentes pantallas, etc.

En la capa de negocios solamente vamos a poner el código necesario para que se cumplan nuestras reglas de negocios: campos requeridos, validación de valores, relaciones entre objetos, restricciones para eliminar o insertar, etc.

Y en la capa de acceso a datos solamente vamos a poner el código necesario para transformar nuestros objetos de negocio en una fila dentro de un archivo o una base de datos y viceversa.

Les prepare un ejemplo muy breve con código en C# para que se entienda mejor (eso espero!). Está bastante comentado el codigo asique no creo que vayan a tener problemas en interpretarlo.

http://cid-c589ef15c82d0cdf.skydrive.live.com/self.aspx/Public/DataPayasadas/TresCapas.rar

Deben descomprimir el archivo y abrir la solución con Visual Studio 2005. Luego ejecuten en modo Debug (F5) y cuando opriman los botones (insertar o refresh) o cuando cargue el formulario principal vayan haciendo el Paso a paso presionando F11.

La base de datos utilizada es SQLite, una base de datos gratuita de muy buen rendimiento! (cof cof juira Access cof cof)

Algunos links para profundizar sobre el tema:

http://www.microsoft.com/spanish/msdn/arquitectura/das/distapp.mspx

http://www.desarrollaconmsdn.com/msdn/

Bueno espero que les haya sido útil!

Saludos y hasta la próxima!

6 comentarios »

  1. hola ske tal llevo un año programando en .net y lo interesantes es ke nadie me enseño
    todo lo fui descubriendo en cada tropezon ke chidooo verdad jejej bueno lo ke fui descubriendo es ke es mejor i r separando nuestra aplicacion en diferentes instacias como lo mencionas y bueno si alguien me hubiera explicado estop me cae ke ya estuviera en otro nivel pero bueno me dagusto encontrar este tipo de articulos que apoyen a todos los novatos como yo..

    buen post +10

    Comentario por marco — Noviembre 9, 2008 @ 3:57 am

  2. Muy buen ejemplo..
    Al igual que marco no uso las capas, articulos como este sin duda nos facilitan las cosas ya que poria dar mejor mantenimiento al Codigo…
    Gracias por el exelente aporte..

    +20

    Comentario por Luis — Agosto 5, 2009 @ 12:39 am

  3. Esto es lo que tanto de nosotros los novatos de programación necesitábamos! Te mereces mis respetos y aplausos por tu apoyo

    Comentario por Edison — Agosto 19, 2009 @ 5:19 pm

  4. muy bueno el ejemplo, tenia un consula, tengo una aplicacion que maneja clientes y equipos, donde cada equipo pertenece a un cliente y posee un estado disponible o no disponible(equipo), en la bd esta mapeada la relacion. En el codigo como se mapea esa relacion?, a la entidad equipo le agrego un atributo del tipo cliente? private Cliente cli y para y la propiedad “disponible” la tomo como una enumeracion? asi me trae el nombre del estado y no el codigo?
    lo que necesitaba hacer es que por cada cliente que le indico me traiga en un datagrid los datos de todos sus equipos. Mucha gracias por todo la verdad que el ejemplo me aclaro varias cosas

    Comentario por matias — Septiembre 3, 2009 @ 6:15 pm

    • Hola matias! gracias por tu consulta! el tema de los mapeos es un tema bastante extenso… pero basicamente lo que podes hacer es en la clase Cliente poner una propiedad de tipo
      List<Equipo> Equipos { get; set;} de esta forma podes iterar sobre esa colección y obtener los equipos de un cliente:

      foreach(Equipo oEquipo in oClienteActual.Equipos)
      {
      Console.Write(oEquipo.Nombre);
      }

      o bien

      gridEquipos.DataSource = oClienteActual.Equipos;

      Un detalle a tener en cuenta, o mejor dicho un método que permite mejorar la performance es el Lazy Load. Esto sirve para que la lista de Equipos se llene solo cuando la necesitamos.

      Con respecto a tu segunda pregunta, con la enumeración creo que sería bastante flexible a futuro. Sería algo asi:

      public enum EstadoEquipo = {No Disponible, Disponible};

      public EstadoEquipo Estado { get; set; }

      Esa enumeración supondrá que No Disponible = 0, Disponible = 1… si usas otros valores hay que ponerlo explicitamente…

      Saludos!

      Comentario por pabloide86 — Septiembre 4, 2009 @ 12:36 am

  5. Hola Pabloide, muy buen aporte.Llevaba mucho tiempo documentandome al respecto y puedo decir que es el mejor ejemplo que he visto hasta ahora. Facil , conciso y muy bien explicado. Por gente como tú me hice programador.

    Mil gracias Pabloide. Recomendaré tu blog.

    Saludos.

    Comentario por Antonio — Octubre 5, 2009 @ 12:59 pm


Canal RSS de los comentarios de la entrada. URI para TrackBack.

Deja un comentario

Blog de WordPress.com.