Concevoir et implémenter des architectures maintenables et performantes
.NET Core a renouvellé la manière de réaliser des applications backend: injection de dépendances, serveur web Kestrel, gestion de configuration avancée, logging, sécurité, etc... Ces technologies sont au coeur des applications .NET mais nécessitent, pour être utilisées efficacement, une solide connaissance des designs patterns qui structurent une application backend.
Ce cours vous permettra d'assimiler les bonnes pratiques de conception et les design patterns essentiels et de les mettre en application avec les technologies phares de l'écosystème .NET.
(35 heures)
Développeurs et développeuses .NET (C#), architectes
Accessible aux personnes en situation de handicap
DélaiLe cours peut être organisé dans un délai d'un mois.
Objectifs
A l'issue du cours vous saurez:- mettre en œuvre le couplage faible avec l'injection de dépendances;
- concevoir une architecture maintenable avec le pattern command;
- accéder aux données d'une base de données relationnelle avec un ORM;
- appliquer des transactions pour garantir la cohérence d'un système;
- créer les endpoints d'une API REST avec ASP.NET MVC;
- implémenter un frontend MVC avec ASP.NET MVC;
- sécuriser une API REST avec ASP.NET MVC, et OpenID Connect et JWT;
- livrer une application en tant qu'image OCI et la déployer sur Kubernetes.
Prérequis
Ce cours demande une connaissance solide des bases de la programmation C# (principes de la programmation orientée objet, types génériques, custom attribute, expressions lambda) et une habitude de travailler avec Visual Studio, VsCode ou Rider.
Méthodes pédagogiques
- Explication, pour chaque concept, du problème qu'il prétend résoudre.
- Mise en pratique d'un concept immédiatement après qu'il ait été présenté.
- Validation de chaque étape par exécution de tests unitaires.
- Exercice « fil rouge » pour obtenir en fin de cours une application complète.
- QCM en fin de chapitre pour s'assurer de l'acquisition des connaissances.
Programme détaillé
Introduction
- L'adoption d'un langage commun (ubiquitous language) pour une meilleure collaboration.
- Performance is a feature.
- L'adoption des principes KISS, DRY, POCO pour une meilleure maintenabilité.
- La préférence pour les applications stateless.
- Le découpage en couches.
- Domain driven design et la délimitation des contextes (bounded contexts).
- Monolithe ou microservices.
- Panorama de l'écosystème .NET.
Couplage faible avec Microsoft.Extensions.DependencyInjection
- Présentation des designs patterns strategy et factory.
- La déclaration d'une
IServiceCollection
. - L'inscription d'un service.
- L'injection de dépendances.
- L'accès aux propriétés issues d'une
IConfiguration
. - Le couplage avec
Microsoft.Extensions.Logging
. - La configuration par custom attributes.
Mise en pratique: mise en oeuvre de l'injection de dépendance avec
Microsoft.Extensions.DependencyInjection
.
Echange de messages avec le pattern command
- La commande comme représentation des users inputs d'un cas d'utilisation.
- Le routage des commandes vers les components métiers.
- La validation.
- La gestion des exceptions.
- la démarcation transactionnelle.
- La mise en oeuvre d'une architecture CQRS (command query responsability segregation).
Mise en pratique: application du pattern command pour réduire le couplage et augmenter la maintenabilité.
Accès aux données et gestion des transactions
- Les différents types de base de données (SQL, NoSQL, NewSQL).
- Le théorème CAP.
- L'exécution non bloquantes des opérations I/O pour gagner en scalabilité.
- Le rôle d'un pool de connexions.
- Les transactions et les principes ACID.
- Le pattern Unit of work.
- Les records et les tuples pour manipuler des données immutables.
- Le pattern Repository (et ses limites) et son implémentation en .NET: EntityFrameworkCore.
- Les mini-ORM comme solution pour développer des data driven applications, présentation de Dapper.
Mise en pratique: mise en oeuvre du pattern unit of work pour accéder aux données de manière transactionnelle, requêtage d'une base de données avec Dapper.
Création d'une API REST avec ASP.NET MVC
- Le serveur web embarqué Kestrel et son event loop.
- Les middlewares.
- Les bonnes pratiques de conception d'une API REST.
- Les API Controlers et le traitement des requêtes.
- La validation.
- La gestion des exceptions.
- Les tests d'une API REST.
Mise en pratique: création d'une API REST pour exposer l'application développée précédemment.
Réalisation d'une application web MVC avec ASP.NET MVC
- Présentation du pattern Model View Controler.
- La définition du modèle et sa transmission aux vues.
- Les vues Razor.
- Ajax et les vues partielles pour une navigation plus fluide.
- La validation.
Mise en pratique: création d'un frontend MVC pour exposer l'application développée précédemment.
Sécurisation d'une application web
- La déclaration d'un référentiel d'utilisateurs avec ASP.NET Identity.
- Choix d'un scheme d'authentification: cookie ou jeton JWT.
- Le couplage avec un serveur OpenID Connect.
- Définition des règles d'accès.
- L'accès à l'identité de l'utilisateur.
- Les stratégie de révocations.
Mise en pratique: sécurisation de l'API REST développée précédemment avec JWT.
Intégration continue et livraison continue
- Rappel des commandes .NET pour créer un livrable.
- La méthodologie 12 factor app.
- Création et déploiement d'image OCI.
- Le déploiement d'une image OCI sur un orchestrateur Kubernetes.
Mise en pratique: création d'une image OCI à partir de l'API REST développée précédemment, déploiement sur Kubernetes (Minikube).
Prix et financements
2 12
Réduction de 50% pour les associations reconnues d'utilité publique.
Sources de financements pour les organisations françaises:
- prise en charge tout ou partie du coût de la formation par votre opérateur de compétence (OPCO);
- Le dispositif FNE formation si votre organisation est éligible.
- Le plan de développement des compétences de votre entreprise (renseignez-vous auprès de votre service RH).