Desarrollando en Capas con el .NET Framework


Hola Comunidad!!!


En esta oportunidad les doy visibilidad de un evento que tuvimos la oportunidad de ejecutar en las ciudades de Barquisimeto, Valencia y Caracas. Se trató del evento "Desarrollando Aplicaciones Web en Capas: IVR Virtual". En este evento, nuestro objetivo fue presentar un ejemplo real, un caso que pudiera tener semejanza con los problemas a los cuáles se enfrentan los desarrolladores en su rutina diaria.


Básicamente, lo que hicimos fue basarnos en el "Application Architecture Guidance 2.0- Designing Applications on the .NET Platform" el cuál es una guía para la comprensión y el mejoramiento de las arquitecturas de las aplicaciones que ustedes construyen. La guía de arquitectura, provee de un módelo agnóstico que permite diseñar aplicaciones con base en la siguiente arqiutectura:



 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


Resaltamos en color amarillo, los componentes que desarrollamos para la aplicación IVR:



  • Data Access Components / Data Helpers / Utilities: Se utilizaron para desarrollar los componentes de acceso a datos, las facilidades que brinda el Entity Framework, incluídas en el .NET Framework 3.5. Este componente, a través de esta capa, expone los servicios del "Contexto de Datos" (DataContext), provisto por el Entity Framework, para ser consumidos por una capa de servicios que utiliza la demostración.

  • Business Workflows / Business Components: Se utilizaron para desarrollar los componentes de negocios las capacidades ofrecidas por Windows Workflow Foundation, incluídas en el .NET Framework 3.0. Este es el componente "maestro" de toda la demostración, ya que implementa secuencias de flujo de trabajo de estado para manejar las opciones del IVR.

  • UI Components / Service Interfaces: En la capa de presentación, no utilizamos Windows Presentation Foundation, para simplificar la demostración (lo vamos a hacer en el próximo evento :)). En su lugar, implementamos una interfaz muy sencilla utilizando ASP .NET AJAX para ejemplificar el uso del control UpdatePanel con GridViews y utilizamos un cotrol de Silverlight específicamente el control MediaPlayer, para mostrar algunos videos en la demostración.

La pantalla de la demostación se presenta de la siguiente manera:



 


 


 


 


 


 


 


 


 


 


 


 


 


Cada uno de los proyectos los pueden descargar de las siguientes direcciones:



  • LayerEntityFramework.zip: Este es el proyecto que enmarca la información del acceso a datos.

  • WFWebService.zip: Este es el proyecto que implementa la interfaz del contexto de datos y los expone a través de servicios web.

  • DEMOIVR.zip: Este es el proyecto que implementa la capa de flujos de trabajo (Windows Workflow Foundation), de estilo Aplicación de Consola.

  • Presentacion.zip: Este es el proyecto que imeplementa la intefaz en ASP .NET 3.5, AJAX y el control Silverlight 2. Además, consume los servicios web expuestos por la capa WFWebService.zip.

Es mi deseo que este ejemplo pueda ayudarlos a comprender cómo implementar mejores aplicaciones web, a través del modelo de desarrollo en capas, y utilizando algunas características de los distintos frameworks.


Si desean trabajar en este ejemplo, para mejorarlo conjuntamente con la comunidad, por favor, escríbanme para coordinar dicha actividad.


Estamos en contacto!!!



Néstor Guadarrama


Gerente Unidad de Desarrollo de Software


Microsoft Venezuela



 


 

Comments (4)

  1. Desarrollando en Capas con el .NET Framework : entrada del blog de Nestor Guarrama, donde explica de

  2. Desarrollando en Capas con el .NET Framework : entrada del blog de Nestor Guarrama, donde explica de

  3. aleafonso says:

    Nestor, muy buen post en cuanto a Arquitectura. Sin embargo, en mi caso personal he preferido seguir trabajando con objetos fuertemente tipados para la capa de acceso a datos mediante ObjectsDataSources. Me da la percepción de tener un mayor control sobre el código y el flujo de la aplicación, además de tener mayor legibilidad para los programadores en C#.

    Nestor, basándome en esto, por qué debería adoptar lo propuesto por el Entity Framework en mis desarrollos? Hay alguna ventaja considerable respecto a lo anteriormente comentado? Quizás por ignorancia no he sabido aprovechar todas sus ventajas.

    De antemano, agradezco tu atención.

    Alejandro Afonso Spinola

  4. nguada says:

    Hola Alejandro. Excelente comentario!!!. Desde mi perspectiva, el Entity Framework brinda un soporte programático al desarrollo en capas orientado a objetos. Sin embargo, hoy por hoy, el Entity Framework presenta 2 problemas. El primero es que, cuando se trata de regresar al modelo de entidades, estructuras complejas como datos estructurados XML, el Entity Framework te genera un error de excepción, el cuál debes manejar para la iteración de la estructura XML. El segundo problema se presenta con el hecho de que todavía el Entity Framework no es "bi-direccional", es decir, todavía no refresca el esquema de BD (esto es un aspecto que debe ser así por temas relacionados con la seguridad de los datos). Dicho esto, para proyectos que podríamos catalogar como "sencillos" donde no se requieren estructuras complejas de programación de datos, El Entity Framework es una muy buena solución. Ahora, en escenarios más profundos, personalmente apuesto a desarrollar Data Factories que implementen interfaces agnósticas de dovolución de datos para estructuras complejas. Esto significa que, desde la capa de datos, hacia la capa de manejo de entidades de objetos y posteriormente librerias de reglas de negocios, workflows, seguridad, etc, paso estructuras XML bien formadas. Esto me garantiza que no importa el componente, librería, paquete o emsamblado que intente comunicarse con dichos componentes, la forma de comunicación siempre será "limpia", a través de objetos (clases progamáticas) o de estructuras XML 1.0 (asegurando la formación estructurada del mensaje de intercambio). En resumen, te propondría que identificaras al menos 3 escenarios para usar alguno de los siguientes componentes: a) Manejo de entidades simples: Entity Framework. b) Estructuras asíncronas o datos complejos: librerias de datos agnósticos (XML u objetos bien formados "Interop" (En este caso un método muy utilizado es el uso de protocolos de intercambio REST/ATOM). c) Estructuras complejas: Librerias agnósticas (no fuertemente tipadas) para intercambio de datos. El último escenario puede ser un poco más arduo para programar, pero permite tener control total sobre el intercambio de datos entre capas y plataformas disimiles. Saludos.

Skip to main content