Arquitectura en tres capas con ASP.Net

Existe en MSDN un interesante tutorial sobre como crear aplicaciones Asp.Net en tres capas. Sin duda el enfoque presentado en el artículo es adecuado para aplicaciones pequeñas y medianas, pero voy a comentar algunas mejoras que yo haría y por qué. Estas mejoras que propongo son practicamente obligatorias si se trata de la arquitectura de una aplicación empresarial.

Sería interesante exponer la capa de negocio a través de una fachada de servicios web, o lo que es lo mismo ir a una arquitectura en cuatro capas. La motivación es desvincular completamente la capa de interfaz de usuario de la capa de negocios, y no cerrarnos la puerta a la posibilidad de tener una interfaz que no este basada en Asp.net o poder elegir un enfoque "Smart Client".

Otra mejora necesaría seria, a mi modo de ver, separar totalmente los objetos contenedores de datos (DataSet) de la lógica de actualización de los mismos (TableAdapter). Esto permite desacoplar estos dos conceptos completamente. La capa de servicios web, necesita conocer los objetos contenedores de datos y los objetos de negocio, pero para nada los objetos de acceso a datos. Si no separamos estos dos conceptos, la fachada de web services tendrá acceso directo a los TableAdapter. Para esto sería necesario abandonar los TableAdapter y utilizar DataAdapter en su lugar, pues estos no no están directamente vinculados con los DataSet. Una gran mejora a futuro sería que el asistente que genera los DataSet y sus DataTable asociados permitiese elegir que se generasen en ensamblados separados, ahora, hasta donde yo se, esto no se puede hacer.

Un error habitual cuando, que el tutorial no comente, pero que voy a comentar aqúi, es hacer toda nuestra capa de acceso a datos y de negocios con clases estáticas, esto no es malo en principio, pero el problema cuando se elije este enfoque es que tendemos a almacenar la conexión como un miembro estático de nuestras clases y esto va contra la práctica que abrir tarde la conexión, cerrarla pronto y no compartirla entre operaciones.

 

11 comentarios sobre “Arquitectura en tres capas con ASP.Net”

  1. Como bien dices, se trata de un tutorial para pequeñas y medianes aplicaciones (Que yo prefiero utilizar las EnterpriseLibrary para el acceso a datos) y no siempre es necesario irse a montar una fachada de Web Services, puesto que en muchos clientes solo quieren montar su intranet únicamente con aplicativos Web y descartan la posiblidad de desarrollar un smart client o una aplicación Windows Forms, y como sabemos el desarrollar esa fachada de servicios implica un costo de tiempo y dado que en muchos proyectos ese tiempo es oro, no es posible desarrollar, aunque comparto tu opinión en que es la mejor manera de hacer una buena aplicación empresarial.

    Salu2.

  2. Esta muy bien el enfoque de 4 capas pero solo para aplicaciones muyyy grandes y
    Si mi cliente solo quiere una aplicacion web y no va a querer jamás una winforms ni smartclient me parece suficiente con 3 capas sin servicios web.

    Opino como Nat e incluso a veces cuando el proyecto es pequeño (unportal con noticias y enlaces unicamente por ejemplo) solo haría un proyecto con VS con una unica dll usando por ejemplo los data access app blocks como capa de acceso datos y los webforms .aspx como capa de cliente (que usan los objetos de negocio) ademas de unas clases que implementan mi lógica de negocio que usan la capa de datos exclusivamente. Es decir preservamos el mismo enfoque de arquitectura de 3 capas pero con un solo proyecto.

    Lo estuve hablando asi con Scott Mitchel de 4guysfromrolla autor del link que menciona Rodrigo. Si duda el link es muy educativo y lo uso en los cursos que imparto de asp.net

    Saludos
    Sergio

  3. me parece que el modelo en capas incluyendo web services es una inteligente opción siempre pensando en el futuro y la escalabilidad, nosotros en un proyecto de facultad realizamos toda nuestra lógica de negocios con web services (en visual studio 2005) y nuestro cliente web en MoNo con ASPNet 2.0 al intentar realizar reportes en el cliente web con Mono fue imposible, entonces decidimos realizar un web service que devuelva los reportes en forma de un stream de bytes y que el cliente web los consuma. Esa fue una de las facilidades que obtuvimos de modelar con capas además de muchas otras.
    Muy buen blog siempre encuentro algo interesante
    Saludos

  4. Hola a todos.
    Quizas este no sea el marco adecuado para hacer una pregunta, ya que se utiliza mas bien para hacer aportaciones, pero suelo leer este blog muy a menudo y quizas me podais guiar un poco sobre donde puedo encontrar informacion al respecto.

    Me dispongo a crear una aplicacion Web utilizando ASP.NET 2.0. Pensaba utilizar para ello el enfoque de 3 capas. Durante el estudio final del proyecto, decidimos utilizar tambien AJAX.NET.

    Mi pregunta es: Hay algun enfoque, «patterns & practise» o similar para unir digamos los dos conceptos?.

    Agradezco vuestros comentarios por adelantdo.

    Un saludo,
    Alberto

  5. SALUDOS:

    He elaborado sistemas utilizando la arquitectura de tres capas y tengo un preliminar de una arquitectura como seria aplicando el soa. A lo que me remito es no utilizar Dataset, tablaAdapters como parametros hacia los metodos porque los servicios web si deseamos que sean interoperables con java u otro lenguaje no lo va reconocer.

  6. Hola amigo, le quiero pedir un favorsote, soy relativamente nuevo en esto de asp.net, sera posible que tenga algun proyecto de ejemplo donde utilice esta arquitectura de 4 capas que me pueda enviar o si me puede indicar alguna pagina o libro que pueda descargar donde explique de manera detallada este tipo de arquitectura. Gracias!!

    gchmex@hotmail.com

  7. Hola Rodrigo Real, creo que el tutorial debe ser bueno, la verdad no se por que no sale tutorial ni naa 🙁 necesito de urgencia como hacer un proyecto orientado hacia la web o .Net en las tres capas. Porfavor te pido como hacer para ver el tuto o si tienes alguna info de como hacer esto te lo agradeceria de corazon xD. Muchas gracias y espero que contestes pronto.

  8. Hola, comentas que un error es que no se puede compartir la conexion. ¿Algun articulo o algo en internet para saber como compartir la conexion entre objetos o clases?
    Graciasss

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *