Skills que aprenderás
Convocatorias
No hay convocatorias abiertas ahora mismo, pero no te pierdas la oportunidad: guarda este curso y te avisamos en cuanto se abra una convocatoria.
Recursos
No hay recursos disponibles todavía para esta convocatoria
Dirigido a desarrolladores con dominio sólido de C# que buscan dar el salto hacia la ingeniería de software de alto nivel, este curso aborda los fundamentos que separan a un programador competente de un arquitecto técnico capaz de tomar decisiones de diseño con criterio y evidencia. A lo largo de diez horas, el participante trabajará con patrones arquitectónicos modernos como Clean Architecture y arquitectura hexagonal, profundizará en el sistema de tipos genérico avanzado, explorará las implicaciones de los distintos enfoques de gestión de memoria y concurrencia, y aprenderá a anticipar y prevenir problemas estructurales mediante análisis estático y automatización de calidad. Al finalizar, el participante será capaz de diseñar y justificar la arquitectura de una solución .NET, optimizar su rendimiento de manera medible y establecer salvaguardas automatizadas que mantengan la integridad del código a lo largo del ciclo de vida del proyecto.
Al completar el curso, el participante será capaz de:
Span<T>, Memory<T>, ArrayPool<T>) y los mecanismos de concurrencia de alto rendimiento (Channel<T>, PLINQ), identificando los trade-offs asociados a cada opción.Arquitecturas limpias y decisiones de diseño documentadas. El bloque de apertura sitúa al participante ante las decisiones de mayor impacto en una solución .NET: la separación de capas en Clean Architecture y la arquitectura hexagonal, la gestión explícita de dependencias entre proyectos y la elaboración de Architecture Decision Records (ADR) como artefacto de comunicación técnica. A continuación se introduce el patrón CQRS mediado por MediatR y su contraparte de servicios directa, analizando con métricas reales de complejidad ciclomática y acoplamiento cuándo el mediador aporta valor y cuándo lo añade innecesariamente.
Sistema de tipos avanzado e inyección de dependencias segura. Este bloque profundiza en las capacidades del compilador como primera línea de defensa. Se trabaja el diseño de interfaces y clases genéricas con constraints múltiples, covarianza e contravarianza, eliminando castings inseguros en el código consumidor. Paralelamente, se estudia el ciclo de vida de los servicios registrados en el contenedor DI, con énfasis en la detección temprana de conflictos de captive dependency a partir del análisis estático del grafo de dependencias, antes de que la aplicación arranque.
Gestión de memoria y concurrencia de alto rendimiento. Con base en benchmarks reproducibles construidos con BenchmarkDotNet, el participante compara el coste de allocations y throughput entre el acceso convencional a datos y las alternativas basadas en Span<T>, Memory<T> y ArrayPool<T>. El estudio de concurrencia aplica Channel<T>, Parallel.ForEachAsync y PLINQ para transformar pipelines secuenciales en soluciones paralelizadas, midiendo la reducción de latencia de forma cuantitativa. Se complementa con la optimización de consultas EF Core mediante compiled queries, split queries, proyecciones con AsNoTracking y lectura crítica del plan de ejecución SQL generado.
Automatización de calidad y generación de código en tiempo de compilación. El bloque de cierre convierte las decisiones arquitectónicas anteriores en restricciones ejecutables. Se configura un pipeline de CI que integra Roslyn Analyzers y reglas de ArchUnit para bloquear merges ante violaciones de estilo o estructura. Como colofón, se aborda la creación de Source Generators con Roslyn: desde el análisis del árbol sintáctico hasta la generación de boilerplate predecible y testeable, garantizando que el output no introduce errores en el proyecto consumidor.
El participante debe llegar al curso con dominio de los contenidos cubiertos en CS02 (C# — Intermedio), incluyendo manejo fluido de LINQ, programación asíncrona con async/await, principios SOLID, inyección de dependencias básica y escritura de pruebas unitarias con xUnit o NUnit. Se asume experiencia práctica con Entity Framework Core a nivel básico-intermedio y familiaridad con el flujo de trabajo en un repositorio Git con ramas y pull requests. Sin estos fundamentos, los bloques de optimización y arquitectura resultarán inaccesibles.