Concevoir des architectures logicielles évolutives pour des applications full stack Java ou .NET
Une architecture logicielle efficace ne se résume pas à des choix technologiques : elle nécessite une vision globale intégrant contraintes métiers, expertise technique et collaboration inter-équipes. Pourtant, beaucoup de projets échouent par manque de critères clairs, une mauvaise évaluation des compromis (CAP, ACID), ou une méconnaissance des patterns adaptés (monolithe vs microservices).
Cette formation offre une approche pratique de la conception d’architectures full stack (backend, frontend, données) :
- Cadrer les objectifs qualité (maintenabilité, scalabilité).
- Choisir les solutions techniques (frameworks, bases de données, APIs) en fonction des cas d’usage.
- Industrialiser le déploiement (CI/CD, conteneurs).
Le tout illustré par une application démo en Java/.NET, reprenant les défis réels des participant·es.
Est-ce pour vous ?
Développeurs et développeuses senior·es, architectes logiciels, tech leads, chef·fes de projets techniques impliqué·es dans la refonte d’application existantes (legacy app), le passage à une architecture microservices ou l’optimisation de performance ou de coûts d’infrastructure.
Préalables
Ce cours demande une connaissance générale du développement d'applications backend.
Ce que vous saurez faire
- ✓ Définir une architecture orientée qualité en alignant objectifs métiers et contraintes techniques
- ✓ Structurer le code avec des patterns et principes réduisant la dette technique et améliorant la testabilité
- ✓ Choisir entre monolithe et microservices en s’appuyant sur les bounded contexts et le context mapping
- ✓ Concevoir des systèmes de données et d’intégration adaptés (SQL, NoSQL, messaging, APIs REST, gRPC, GraphQL)
- ✓ Mettre en place des pratiques de sécurité et de déploiement continu avec conteneurisation et cloud
Contenu de la formation
Cette formation propose une démarche pour concevoir des applications maintenables, résilientes et performantes. Elle aborde les principes d’architecture applicative sous un angle opérationnel, en mettant en relation les choix techniques, les objectifs métiers et l’organisation des équipes. Chaque module s’appuie sur des cas d’usage complets, avec une application démo développée au fil des étapes, en environnement Java ou .NET.
1 Introduction : une architecture orientée qualité
Une architecture logicielle efficace repose sur des critères de qualité clairement définis, tels que la maintenabilité, la testabilité, la résilience ou la performance. Ce module pose les fondations de l’architecture orientée qualité, en introduisant les paradigmes de développement, le rôle des objectifs partagés entre parties prenantes, et l’importance d’un vocabulaire commun (ubiquitous language) pour structurer les échanges.
- Définition des objectifs: maintenabilité, testabilité, résiliance, performances....
- Le principe du langage commun (ubiquitous language) pour éviter les malentendus.
- Les paradigmes: objet, fonctionnel, déclaratif.
- Différents types d'applications : I/O bounded, CPU bounded.
- Le paysage IT : les écosystèmes les plus répandus.
2 Structurer le code : des patterns pour réduire la dette technique
- La séparation des responsabilités.
- Les design patterns essentiels.
- La préférence pour les applications stateless.
- L'apport des frameworks (cadriciels) et librairies.
- Les tests pour garanti
3 Application Monolithe vs Microservices : choisir en toute connaissance de cause
- La délimitation des contextes métiers (bounded context).
- Les avantages et inconvénients respectifs des applications monolithiques et des architectures microservices.
- La cartographie des contextes (Context Mapping) pour identifier les dépendances et guider le choix des paterns d’intégration.
4 Gérer les données : SQL, NoSQL et au-delà
- Différents types de bases de données (Sql, NoSql) pour différents besoins.
- Le théorème CAP.
- L'apport d'un pool de connexions.
- L'accès aux données : bloquant ou non bloquant.
- Les transactions et les principes ACID.
- La couche de persistance.
5 Les messages : intégrer des services de manière asynchrone
- Principes et cas d'usages.
- Les mécanismes de réception des messages: push ou pull.
- Définition des besoins.
- Présentation de RabbitMQ et de Kafka.
6 Concevoir des APIs résilientes
- SOAP ou gRpc pour exposer des opérations (RPC) et des communications inter-services ultra-rapides
- REST pour exposer des ressources.
- GraphQL comme alternative à REST, permettre des requêtes sur-mesure et éviter la limitation de charge (overfetching)
- Publish / suscribe avec WebSocket et STOMP.
7 Sécurité : protéger sans complexifier
- Quelques bonnes pratiques ergonomiques.
- Quelques bonnes pratiques d’éco-conception.
- Les formulaires.
- Server side rendering ou client side rendering.
- Réalisation d’IHM côté serveur.
- Les single page applications pour le développement côté client.
- La sécurité : par session, par cookie ou par jeton JWT.
8 Standardiser la livraison avec le déploiement continu
- Les modes de compilation : JIT ou AOT.
- La méthodologie "15 factors".
- La conteneurisation: création d'image OCI, livraison sur Kubernetes.
- Le serverless (sans serveur) et le déploiement de fonctions.
📌 Informations pratiques
Nos formations sont offertes à Montréal ou Québec, en présentiel ou en classe virtuelle. Les dates et lieux sont précisés lors de votre choix de session ci-dessous. Si vous avez des questions, consultez notre FAQ.