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)

En présentiel ou en classe virtuelle
En français ou en anglais
Public

Développeurs et développeuses .NET (C#), architectes

Accessible aux personnes en situation de handicap

Délai

Le cours peut être organisé dans un délai d'un mois.

Objectifs

A l'issue du cours vous saurez:

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

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
S.O.L.I.D.
  • 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
Pattern
  • 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
Data
  • 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
REST
  • 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
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
OIDC
  • 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
K8S
  • 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:

Contact

Questions, inscriptions, demande d'adaptation: