DDD con .NET, C# y ASP.NET Web API
10055
Avanzado
Técnicas de programación
60 horas
960 €
Convocatorias
Inicio - Fin
Horario  
4 febrero - 21 febrero Lun, Mar, Mie y Jue de 09:00 a 14:00 Sin definir
4 marzo - 28 marzo Lun, Mar, Mie y Jue de 16:15 a 20:00 Sin definir
Descripción

Desarrollar software capaz de crecer en número de lí­neas de código y caracterí­sticas funcionales es el reto al cual se enfrenta cualquiera a la hora de implementar un proyecto de cierta dimensión.

Una clara separación en capas así­ como una interacción entre las mismas y sus componentes es vital para lograr la meta del éxito, además de crear una base de código fuente amigable para el trabajo en equipo y que pueda reaccionar a los cambios.

El Diseño guiado por el dominio o Domain-driven design (DDD) nos provee las herramientas, prácticas y metodologías para tomar decisiones de diseño que enfoquen y aceleren el manejo de dominios complejos en los proyectos de software.


Objetivos

En este curso intensivo y 100% práctico aprenderéis las técnicas más avanzadas y las mejores prácticas para crear un proyecto de ejemplo completo utilizando el diseño orientado a dominio (DDD) y todos los conceptos periféricos, así­ como patrones de diseño relacionados que te abrirán la puerta a mejorar tus aptitudes profesionales y creativas cuando afrontes desde los más sencillos hasta los más complejos proyectos.

Cuando acabes el curso te llevarás contigo un ejemplo de código real hecho por ti mismo utilizando las últimas tecnologí­as y frameworks para .NET y C# para que te sirva como punto de partida en tus proyectos de ahora y del futuro.

Contenido


Módulo 1: Las características más importantes de C# y .NET que necesitas saber para implementar un buen diseño orientado a dominios.

  • Domina los genéricos. Cláusulas de restricciones genéricas. Covarianza y contravarianza en interfaces y delegados. 
  • Utilización de interfaces a nivel avanzado. Aprende a definir APIs abstractas a nivel avanzado.
  • Colecciones genéricas. 
  • Colecciones inmutables. 
  • Diseño orientado a contratos: domina Code contracts
  • Árboles de expresiones, expresiones lambda y delegados. 
  • Domina los casos de uso del tipado dinámico. 
  •  Domina la programación asíncrona con Task Asynchronous Pattern. Task Parallel Library y las palabras reservadas async y await disponibles desde C# 5.0. 
  • Colecciones concurrentes. 
  • Mecanismos de sincronización de hilos y procesos.


Módulo 2: Diseño orientado a dominio. Definición y patornes de diseño relacionados.

  • ¿Qué es DDD?
  • ¿Qué es el código de dominio y código de infraestrucutra?
  • Patrón de diseño data mapper
  • Patrón de diseño repository
  • Patrón de diseño unit of work
  • Patrón de diseño service layer
  • Patrón de diseño domain model
  • Patrón de diseño façade
  • Patrón de diseño DTO
  • Patrón de diseño specification
  • Patrón de diseño inversion of control
  • Patrón de diseño dependency injection.


Módulo 3: Inversión de control con Castle Windsor

  • Qué es un contenedor de inversión de control. 
  • Introducción a Castle Windsor
  • Configuración por XML y por código. 
  • Configuración basada en convenciones predeterminadas y personalizadas. 
  • El antipatrón de diseño service locator. Cómo evitarlo. 
  • Inyección de dependencias. 
  • Gestión de la vida de los objetos. Ámbitos. 
  • Conceptos avanzados de Castle Windsor.


Módulo 4: Elige proyecto y la fuente de datos

  • Elige qué proyecto de ejemplo quieres desarrollar en el curso. Te proponemos nosotros unos o el que tú quieras. 
  • Si quieres que la fuente datos sea relacional...
    • Elige el OR/M que quieres aprender o profundizar:
      • Entity Framework. 
      • NHibernate. 
      • Dapper. 
    • Sea cual sea el que hayas elegido, vamos a profundizar y entender sus ventajas a la hora de implementar un verdadero diseño orientado a dominios y los pros y contras de cada OR/M en ese sentido. 
    • Operaciones de lectura y escritura con el OR/M seleccionado. Cómo implementar CRUD.
    • Ventajas y desventajas de usar únicamente una fuente de datos relacional para implementar DDD. 
  • Si quieres que la fuente de datos sea relacional vamos a implementar nuestro DDD con MongoDB.
    • Ventajas y desventajas de usar únicamente NoSQL para implementar DDD.
    • Domina el cliente oficial de .NET de MongoDB.
    • Operaciones de lectura y escritura con Mongo. Cómo implementar un CRUD.


Módulo 5: Cómo estructurar una solución de Visual Studio para DDD

  • Creación de proyectos de Visual Studio con los nombres adecuados y relacionados entre si para evitar dependencias innecesarias.


Módulo 6: Implementación del patrón repositorio y unit of work

  • Implementación del patrón repositorio para los diferentes dominios en base al proyecto de ejemplo elegido.
  • Cómo abstraer adecuadamente la fuente de datos concreta independientemente de si es relacional o no relacional (NoSQL).
  • Cómo crear repositorios en los que el código sea lo más reutilizable posible.
  • Transacciones de negocio y entre dominios con unidades de trabajo. Implementación del patrón unit of work.


Módulo 7: Implementación del código de dominio

  • Definición de qué es realmente código de dominio.
  • Implementación de los dominios del proyecto elegido mediante el patrón de diseño service layer.
  • Cómo definir e implementar restricciones en el funcionamiento del dominio mediante el patrón de diseño specification. Debate sobre en qué capa o capas deben utilizarse las especificaciones.
  • Implementación de interacciones entre dominios.
  • Dominio rico o dominio anémico. Cuándo recurrir a uno u otro. Implementación del patrón de diseño domain model.
  • Eventos de dominio.


Módulo 8: Implementación del patrón de diseño façade

  • Implementación de simplificaciones de los servicios mediante el patrón de diseño façade.
  • Utilización del patrón de diseño DTO como mecanismo de entrada y salida de datos en forma de objetos entre los consumidores de las fachadas y el dominio.


Módulo 9: Introducción a las pruebas de código unitarias y de integración con Visual Studio Test.

  • Implementación de varias pruebas unitarias de código de dominio e infraestructura.
  • Implementación de varias pruebas de integración de código de dominio.


Módulo 10: Implementación de una API REST para exponer el dominio a la capa de presentación y otros servicios.

  • Introducción y perfeccionamiento en el uso de ASP.NET Web API. Conceptos básicos y avanzados.
  • Introducción y perfeccionamiento sobre qué es REST y cómo implementarlo adecuadamente.
  • Introducción a OWIN y Katana como servidor Web.
  • Integración de Castle Windsor en ASP.NET Web API. Uso del patrón de diseño dependency injection en ASP.NET para que tu código cumpla el patrón de diseño inversion of control y tu código presente una clara separación de conceptos y desacoplamiento.
  • Implementación de varios recursos REST HTTP que expongan los dominios implementados durante el curso.
  • Aprendiendo a depurar APIs REST con Fiddler.


Módulo 11: Implementación de una interfaz gráfica Web mediante AngularJS de ejemplo que consuma la API REST

  • Introducción a AngularJS. Conceptos básicos.
  • Introducción a single page applications con Angular UI Router.
  • Implementación de varias vistas que lean y escriban datos mediante el dominio expuesto a través de la API REST.


Módulo 12: Seguridad en ASP.NET Web API con OAuth 2.0 y ASP.NET Identity.

  • Introducción a ASP.NET Identity.
  • Implementación de un middleware de OWIN con ASP.NET Identity para autenticar y autorizar solicitudes y usuarios mediante OAuth 2.0.