Guía de Arquitectura N-Capas orientada al Dominio con .NET 4.0 (Beta) César de la Torre Llorente Unai Zorrilla Castro Miguel Angel Ramos Barros Javier Calvarro Nelson GUÍA DE ARQUITECTURA N-CAPAS ORIENTADA AL DOMINIO CON .NET 4.0 (BETA) No está permitida la reproducción total o parcial de este libro, ni su tratamiento informático, ni la transmisión de ninguna forma o por cualquier medio, ya sea electrónico, mecánico, por fotocopia, por registro u otros métodos, sin el permiso previo y por escrito de los titulares del Copyright. Diríjase a Cesar de la Torre Llorente ([email protected]), si exclusivamente para el uso interno de su empresa/organización, desea reutilizar el contenido de esta obra y personalizarlo hacia una Arquitectura corporativa concreta. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra. DERECHOS RESERVADOS © 2010, por Microsoft Ibérica S.R.L. EDITADO por Krasis Consulting, S. L. www.Krasis.com ISBN: 978-84-936696-3-8 Depósito Legal: M-13152-2010 Impreso en España-Printed in Spain Índice ARQUITECTURA MARCO .NET MICROSOFT IBÉRICA Arquitectura Marco .NET Microsoft Ibérica ............................................................................... 3 1.- Introducción .................................................................................................................................. 1 1.1.- Audiencia del documento .............................................................................................. 1 1.2.- Objetivos de la Arquitectura marco .NET ............................................................... 1 1.3.- Niveles de la documentación de la Arquitectura marco .NET ............................ 2 FUNDAMENTOS DE ARQUITECTURA DE APLICACIONES ............................................. 3 ESTILOS ARQUITECTURALES ...................................................................................... 9 ARQUITECTURA MARCO N-CAPAS ....................................................................... 33 1.- Arquitectura de Aplicaciones en N-Capas .......................................................................... 33 1.1.- Capas vs. Niveles (Layers vs. Tiers) .......................................................................... 33 1.2.- Capas ................................................................................................................................. 34 1.3.- Principios Base de Diseño a seguir ......................................................................... 39 1.3.1.- Principios de Diseño ‘SOLID’ .............................................................................. 39 1.3.2.- Otros Principios clave de Diseño ....................................................................... 40 1.4.- Orientación a tendencias de Arquitectura DDD (Domain Driven Design) ... 41 1.5.- Orientación a tendencias de Arquitectura EDA (Event Driven Architecture) .. 43 2.- Arquitectura Marco N-Capas con Orientación al Dominio ........................................... 45 2.1.- Capas de Presentación, Aplicación, Dominio e Infraestructura ........................ 45 2.2.- Arquitectura marco N-Capas con Orientación al Dominio ............................... 46 2.3.- Desacoplamiento entre componentes ..................................................................... 63 2.4.- Inyección de dependencias e Inversión de control ............................................... 65 2.5.- Módulos ............................................................................................................................ 71 2.6.- Implementación de Estructura de Capas en Visual Studio 2010 ....................... 74 2.7.- Diseño de la solución de Visual Studio .................................................................... 75 2.8.- Arquitectura de la Aplicación con Diagrama Layer de VS.2010 ........................ 83 2.9.- Implementación de Inyección de Dependencias e IoC con UNITY ................. 85 2.9.1.- Introducción a Unity ............................................................................................. 86 2.9.2.- Escenarios usuales con Unity ............................................................................. 87 2.9.3.- Patrones Principales .............................................................................................. 88 2.9.4.- Métodos principales .............................................................................................. 88 2.9.5.- Registro Configurado de tipos en Contenedor ............................................ 89 2.9.6.- Inyección de dependencias en el constructor ............................................... 89 2.9.7.- Inyección de Propiedades (Property Setter) .................................................. 92 2.9.8.- Resumen de características a destacar de Unity ........................................... 93 2.9.9.- Cuando utilizar Unity ........................................................................................... 93 3.- Acceso Dual a Fuentes de Datos: Optimización de Informes, Listados, etc. ............. 94 iv Guía de Arquitectura N-Capas orientada al Dominio con .NET 4.0 (Beta) 4.- Niveles Fisicos en despliegue (Tiers) .................................................................................... 96 CAPA DE INFRAESTRUCTURA DE PERSISTENCIA DE DATOS ................................... 101 1.- Capa de Infraestructura de Persistencia de Datos .......................................................... 101 2.- Arquitectura y Diseño lógico de la Capa de Persistencia de Datos 1 ....................... 102 2.1.- Sub-Capas y elementos de la Capa de Persistencia de Datos .......................... 103 2.2.- Sub-Capa de Repositorios (Repository pattern) ................................................. 103 2.3.- Modelo de Datos ......................................................................................................... 107 2.4.- Tecnología de Persistencia (O/RM, etc.) ............................................................... 108 2.5.- Agentes de Servicios Distribuidos externos ......................................................... 108 3.- Otros patrones de acceso a datos ...................................................................................... 108 3.1.- Active Record ............................................................................................................... 109 3.2.- Table Data Gateway .................................................................................................... 109 3.3.- Data Mapper ................................................................................................................. 110 3.4.- Lista de patrones para las capas de Persistencia de Datos ............................... 110 4.- Pruebas en la capa de Infraestructura de Persistencia de Datos ................................. 111 5.- Consideraciones generales de diseño del acceso a datos ............................................. 113 5.1.- Referencias Generales ................................................................................................ 117 6.- Implementación en .NET de Capa de Persistencia de Datos .................................... 118 7.- Opciones de tecnología para la Capa de Persistencia de Datos ................................. 119 7.1.- Selección de Tecnología de Acceso a Datos ........................................................ 119 7.2.- Otras consideraciones tecnológicas ....................................................................... 120 7.3.- Como obtener y persistir objetos desde el almacén de datos ........................ 122 8.- Posibilidades de Entity Framework en la Capa de Persistencia ................................... 123 8.1.- ¿Qué nos aporta Entity Framework 4.0? ............................................................... 123 9.- Creación del Modelo de Datos Entidad-Relación de Entity-Framework .................. 124 10.- Plantillas T4 de generación de entidades POCO/Self-Tracking ................................ 128 10.1.- Tipos de datos ‘Entidades Self-Tracking’ .............................................................. 131 10.2.- Importancia de situar las Entidades en la Capa del Dominio .......................... 132 11.- Plantillas T4 de Persistencia de Datos y conexión a las fuentes de datos ............. 136 12.- Implementación de Repositorios con Entity Framework y Linq to Entities ......... 136 12.1.- Implementación de Patrón Repositorio ................................................................ 138 12.2.- Clase Base para los Repositories (Patrón ‘Layer Supertype’) ......................... 140 12.3.- Uso de Generics en implementación de clase base Repository ..................... 140 12.4.- Interfaces de Repositorios e importancia en el desacoplamiento entre componentes de capas .......................................................................................................... 145 12.5.- Implementación de Pruebas Unitarias e Integración de Repositorios .......... 147 13.- Conexiones a las fuentes de datos .................................................................................. 151 13.1.- El ‘Pool’ de Conexiones a fuentes de datos ........................................................ 153 14.- Estrategias para gestión de errores originadas en fuentes de datos ....................... 154 15.- Agentes de Servicios Externos (Opcional) .................................................................... 155 16.- Referencias de acceso a datos .......................................................................................... 156 CAPA DE MODELO DE DOMINIO ............................................................................. 157 1.- El Dominio ................................................................................................................................. 157 2.- Arquitectura y Diseño lógico de la Capa de Dominio ................................................... 158 2.1.- La importancia del desacoplamiento de la Capa de Dominio .......................... 159 iv Índice v 2.2.- Aplicación ejemplo: Características de negocio del Modelo de Dominio ejemplo a Diseñar .................................................................................................................. 160 2.3.- Elementos de la Capa de Dominio .......................................................................... 162 2.3.1.- Entidades del Dominio ....................................................................................... 162 2.3.2.- Patrón Objeto-Valor (‘Value-Object pattern’) ............................................ 168 2.3.3.- Agregados (Patrón ‘Aggregate’) ....................................................................... 172 2.3.4.- Contratos/Interfaces de Repositorios dentro de la Capa de Dominio. 174 2.3.5.- Sub-Capa de SERVICIOS del Modelo de Dominio ..................................... 175 2.3.6.- Patrón ‘Unidad de Trabajo’ (UNIT OF WORK) ........................................ 182 2.3.7.- Patrón ESPECIFICACION (SPECIFICATION) ............................................ 185 2.3.8.- Sub-Capa de Servicios Workflows del Modelo de Dominio (Opcional) ..... 190 2.4.- Proceso de diseño de capa del Dominio ............................................................... 192 2.5.- Consideraciones de Diseño de sub-capas del Dominio .................................... 193 2.6.- EDA y Eventos del Dominio para articular reglas de negocio ......................... 195 2.6.1.- Eventos del Dominio Explícitos ....................................................................... 196 2.6.2.- Testing y Pruebas Unitarias cuando utilizamos Eventos del Dominio ... 196 2.7.- Errores y anti-patrones en la Capa de Dominio .................................................. 196 2.8.- Aspectos de Diseño a implementar en la Capa del Dominio .......................... 198 2.8.1.- Autenticación ....................................................................................................... 198 2.8.2.- Autorización ......................................................................................................... 199 2.8.3.- Cache ..................................................................................................................... 200 2.8.4.- Gestión de Excepciones .................................................................................... 201 2.8.5.- Logging, Auditoría e Instrumentalización ...................................................... 202 2.8.6.- Validaciones .......................................................................................................... 202 2.8.7.- Aspectos de despliegue de la Capa de Dominio ......................................... 203 2.8.8.- Concurrencia y Transacciones ........................................................................ 203 2.9.- Mapa de patrones posibles a implementar en las capas del Dominio ............ 204 3.- Implementación de la Capa de Dominio con .NET 4.0 y desacoplamiento entre objetos con ‘Unity’ ....................................................................................................................... 205 3.1.- Implementación de Entidades del Dominio .......................................................... 206 3.2.- Generación de entidades POCO/IPOCO con plantillas T4 de EF ................. 211 3.3.- Situación de Contratos/Interfaces de Repositorios en Capa de Dominio .... 212 3.4.- Implementación de Servicios del Dominio ............................................................ 214 3.4.1.- Desacoplamiento e Inyección de Dependencias entre Servicios y Repositorios mediante IoC de UNITY ........................................................................ 217 3.4.2.- SERVICIOS del Dominio como coordinadores de procesos de Negocio 224 3.4.3.- Implementación de Transacciones en .NET ................................................. 225 3.4.4.- Implementación de Transacciones en la Capa de Servicios del Dominio 228 3.4.5.- Modelo de Concurrencia en actualizaciones y transacciones ................. 230 3.4.6.- Tipos de Aislamiento de Transacciones ........................................................ 231 3.5.- Implementación de patrón ESPECIFICACION (SPECIFICATION pattern) ... 236 3.5.1.- Especificaciones compuestas por operadores AND y OR ....................... 239 3.6.- Implementación de pruebas en la capa del dominio ........................................... 242 CAPA DE APLICACIÓN ........................................................................................... 247 1.- Capa de Aplicacion .................................................................................................................. 247 vi Guía de Arquitectura N-Capas orientada al Dominio con .NET 4.0 (Beta) 2.- Arquitectura y Diseño lógico de la Capa de Aplicación ................................................ 248 2.1.- Componentes de la Capa de Aplicación ................................................................ 250 2.2.- Servicios de Aplicación ............................................................................................... 250 3.- Implementación en .NET de Capa de Aplicacion ........................................................... 250 CAPA DE SERVICIOS DISTRIBUIDOS ........................................................................ 253 1.- Situación en Arquitectura N-Capas .................................................................................... 253 2.- Arquitecturas Orientadas a Servicios y Arquitecturas en N-Capas (N-Layer) ....... 255 3.- Situación de Arquitectura N-Layer con respecto a Aplicaciones aisladas y a Servicios SOA ................................................................................................................................. 256 4.- ¿Qué es SOA? ........................................................................................................................... 257 5.- Pilares de SOA (‘Service Orientation Tenets’) ................................................................ 258 6.- Arquitectura interna de los Servicios SOA ....................................................................... 262 7.- Pasos de Diseño de la Capa de Servicios .......................................................................... 263 8.- Tipos de Objetos de Datos a comunicar .......................................................................... 264 9.- Consumo de Servicios Distribuidos basado en Agentes ............................................... 268 10.- Interoperabilidad ................................................................................................................ 270 11.- Rendimiento ........................................................................................................................... 271 12.- Comunicación Asíncrona vs. Síncrona ............................................................................ 272 13.- REST vs. SOAP ...................................................................................................................... 273 13.1.- Consideraciones de Diseño para SOAP ............................................................... 276 13.2.- Consideraciones de Diseño para REST ................................................................ 277 14.- Introducción a SOAP y WS-* ............................................................................................ 278 15.- Especificaciones WS-* ......................................................................................................... 278 16.- Introducción a REST ............................................................................................................ 281 16.1.- La URI en REST ........................................................................................................... 282 16.2.- Simplicidad .................................................................................................................... 283 16.3.- URLs lógicas versus URLs físicas ............................................................................ 284 16.4.- Características base de Servicios Web REST ...................................................... 284 16.5.- Principios de Diseño de Servicios Web REST .................................................... 285 17.- Reglas globales de Diseño para sistemas y servicios SOA ....................................... 286 18.- Implementación de la Capa de Servicios Distribuidos con WCF .NET 4.0 .......... 290 19.- Opciones tecnológicas ........................................................................................................ 291 19.1.- Tecnología WCF ......................................................................................................... 292 19.2.- Tecnología ASMX (Servicios Web ASP.NET) ..................................................... 293 19.3.- Selección de tecnología ............................................................................................. 293 19.4.- Consideraciones de Despliegue .............................................................................. 294 20.- Introducción a WCF (Windows Communication Foundation) ............................... 295 20.1.- El ‘ABC’ de Windows Communication Foundation .......................................... 297 20.2.- Definición e implementación de un servicio WCF ............................................ 300 20.3.- Hospedaje del servicio (Hosting) y configuración (Bindings) .......................... 304 20.4.- Configuración del servicio ........................................................................................ 306 20.5.- Tipos de alojamiento de Servicios WCF y su implementación ...................... 308 21.- Implementación de Capa de Servicios WCF en Arquitectura N-Layer ................. 312 22.- Tipos de Objetos de Datos a Comunicar con Servicios WCF ................................ 314 23.- Código de Servicio WCF publicando lógica de Aplicación y Dominio .................. 317 vi Índice vii 23.1.- Desacoplamiento de objetos de capas internas de la Arquitectura, mediante UNITY ....................................................................................................................................... 317 23.2.- Gestión de Excepciones en Servicios WCF ........................................................ 319 24.- Referencias Globales DE WCF y Servicios.................................................................... 319 CAPA DE PRESENTACIÓN ....................................................................................... 321 1.- Situación en Arquitectura N-Capas .................................................................................... 321 2.- Necesidades de invertir en la interfaz de usuario ........................................................... 322 3.- Necesidad de arquitecturas en la capa de presentación ............................................... 324 3.1.- Acoplamiento entre capas ......................................................................................... 324 3.2.- Búsqueda de rendimiento. ......................................................................................... 325 3.3.- Pruebas unitarias .......................................................................................................... 325 4.- Patrones de Arquitectura en la capa de Presentación ................................................... 325 4.1.- Patrón MVC (Modelo Vista Controlador) ............................................................ 326 4.2.- Patrón MVP (Modelo Vista Presentador) .............................................................. 328 4.3.- Patrón MVVM (Model-View-ViewModel) ........................................................... 330 4.4.- Visión global de MVVM en la arquitectura orientada a dominios ................... 332 4.5.- Patrones de diseño utilizados en MVVM ............................................................... 333 4.5.1.- El patrón Comandos (Command) ................................................................... 333 4.5.2.- El patrón Observador (Observer) .................................................................. 335 5.- Implementación de Capa DE Presentación ....................................................................... 337 5.1.- Arquetipos, Tecnologías UX y Patrones de Diseño relacionados .................. 340 5.2.- Implementación de Patrón MVVM con WPF 4.0 ................................................. 341 5.2.1.- Justificación de MVVM ....................................................................................... 342 5.2.2.- Diseño con patrón Model-View-ViewModel (MVVM) .............................. 346 5.3.- Beneficios y Consecuencias del uso de MVVM .................................................... 352 CAPAS DE INFRAESTRUCTURA TRANSVERSAL ........................................................ 355 1.- Capas de Infraestructura Transversal ................................................................................. 355 2.- Situación de Infraestructura Transversal en la Arquitectura ........................................ 356 3.- Consideraciones Generales de Diseño .............................................................................. 357 4.- Aspectos Transversales .......................................................................................................... 358 4.1.- Seguridad en la aplicación: Autenticación y Autorización ................................. 359 4.1.1.- Autenticación ....................................................................................................... 359 4.1.2.- Autorización ......................................................................................................... 360 4.1.3.- Arquitectura de Seguridad basada en ‘Claims’............................................. 361 4.2.- Cache .............................................................................................................................. 367 4.3.- Gestión de Configuración .......................................................................................... 368 4.4.- Gestión de Excepciones ............................................................................................. 369 4.5.- Registro/Logging y Auditorías ................................................................................... 370 4.6.- Instrumentalización ...................................................................................................... 371 4.7.- Gestión de Estados ...................................................................................................... 371 4.8.- Validación ....................................................................................................................... 372 5.- Implementación en .NET de Aspectos Transversales .................................................... 373 5.1.- Implementación en .NET de Seguridad basada en ‘Claims’............................... 373 5.1.1.- STS y ADFS 2.0 .................................................................................................... 373 5.1.2.- Pasos para implementar ‘Orientación a Claims’ con WIF ........................ 376 5.1.3.- Beneficios de la ‘Orientación a Claims’, WIF y ADFS 2.0 ........................ 378 viii Guía de Arquitectura N-Capas orientada al Dominio con .NET 4.0 (Beta) 5.2.- Implementación de Cache en plataforma .NET ................................................... 379 5.2.1.- Implementación de Cache-Servidor con Microsoft AppFabric-Cache .... 379 5.2.2.- Implementación de Cache en Nivel Cliente de Aplicaciones N-Tier (Rich-Client y RIA) ............................................................................................................ 385 5.3.- Implementación de Logging/Registro ...................................................................... 386 5.4.- Implementación de Validación .................................................................................. 386 ARQUETIPOS DE APLICACIÓN ................................................................................ 387 1.- Arquetipo ‘Aplicación Web’ ................................................................................................. 389 2.- Arquetipo ‘Aplicaciones RIA’ ................................................................................................ 391 3.- Arquetipo ‘Aplicación rica de escritorio’ (Rich Client) ................................................. 393 4.- Arquetipo Servicio Distribuido - SOA ............................................................................... 395 5.- Arquetipo Aplicaciones Móviles .......................................................................................... 398 6.- Arquetipo ‘Aplicaciones Cloud Computing ’ .................................................................... 400 7.- Arquetipo Aplicaciones OBA (Office Business Applications) ...................................... 404 8.- Arquetipo ‘Aplicación de negocio basada en Sharepoint’ ............................................. 407 EL PROCESO DE DISEÑO DE LA ARQUITECTURA .................................................... 411 1.- Identificar los objetivos de la iteración .............................................................................. 413 2.- Seleccionar los casos de uso arquitecturalmente importantes .................................... 413 3.- Realizar un esquema del sistema ......................................................................................... 414 4.- Identificar los principales riesgos y definir una solución .............................................. 419 5.- Crear Arquitecturas Candidatas .......................................................................................... 420 viii Arquitectura Marco .NET Microsoft Ibérica 1.- INTRODUCCIÓN Microsoft Ibérica ha detectado en diversos clientes la necesidad de disponer de una “Guía de Arquitectura base .NET” en español, que sirva para marcar unas líneas maestras de diseño e implementación a la hora de desarrollar aplicaciones .NET complejas. Este marco de trabajo común (en muchas empresas denominado “Libro Blanco”) define un camino para diseñar e implementar aplicaciones empresariales de envergadura, con un volumen importante de lógica de negocio. Seguir estas guías ofrece importantes beneficios en cuanto a calidad, estabilidad y especialmente un incremento en la facilidad del mantenimiento futuro de las aplicaciones, debido al desacoplamiento entre sus componentes, así como por la homogeneidad y similitudes de los diferentes desarrollos. Microsoft Ibérica define el presente „Libro de Arquitectura Marco‟ como patrón y modelo base, sin embargo, en ningún caso este marco debe ser inalterable. Al contrario, se trata del primer peldaño de una escalera, un acelerador inicial, que debería ser personalizado y modificado por cada organización que lo adopte, enfocándolo hacia necesidades concretas, adaptándolo y agregándole funcionalidad específica según el mercado objetivo, etc. 1.1.- Audiencia del documento Este documento está dirigido a las personas involucradas en todo el ciclo de vida de productos software o de aplicaciones corporativas desarrolladas a medida. Especialmente los siguientes perfiles: Arquitecto de Software Desarrollador 1.2.- Objetivos de la Arquitectura marco .NET Este documento pretende describir una arquitectura marco sobre la que desarrollar las aplicaciones a medida y establece un conjunto de normas, mejores prácticas y guías de desarrollo para utilizar .NET de forma adecuada y sobre todo homogénea en las diferentes implementaciones de aplicaciones. 1
Description: