Une base solide est essentielle pour développer des logiciels innovants et sophistiqués qui s'avèrent adaptés au marché et résolvent les problèmes des utilisateurs. Avez-vous travaillé sur des projets qui semblaient impossibles à poursuivre après les premiers cycles de développement ? Des projets qui sont devenus obsolètes avant même d'avoir eu l'occasion de prendre une seconde bouffée d'air ? C'est ici que l'importance de l'architecture logicielle entre en jeu. Elle a toujours été importante.
N-Tiers
L'architecture en couches (architecture N-Tier) est un modèle de conception de logiciel qui organise une application en couches ou niveaux horizontaux. Chaque couche a une responsabilité spécifique et encapsule un certain niveau de fonctionnalité, favorisant la séparation des préoccupations, la modularité et la maintenabilité. Dans une architecture en couches, chaque couche communique uniquement avec les couches voisines. Cette structure facilite la maintenance et la mise à l'échelle, car les modifications apportées à une couche ont un impact minimal sur l'autre. En suivant le modèle en couches, les développeurs peuvent créer des applications modulaires et flexibles, plus faciles à comprendre, à tester et à faire évoluer.
Client-Serveur
L'architecture client-serveur est un modèle dans lequel un ou plusieurs clients interagissent avec un serveur centralisé, qui fournit des ressources, des services et/ou des données à plusieurs clients.
Pour référence, les clients font référence à la technologie frontale qu'un client/utilisateur peut parcourir (mobile, ordinateur de bureau). Alors qu'un serveur fait référence à la technologie qui gère la logique entre les demandes et la communication avec la base de données. Dans ce modèle, les clients demandent des services et les serveurs traitent et livrent les demandes. Ce modèle offre à l'entreprise une allocation efficace des ressources, une évolutivité et une maintenance plus facile en séparant les responsabilités entre les clients et les serveurs. Vous pouvez également reconnaître ce modèle, car la plupart des modèles d'architecture utilisent ce modèle ou une variante dans leur conception logicielle.
Architecture Microservice
L'architecture de microservices est un système de conception de logiciels qui décompose les applications (client et/ou serveur) en petits composants indépendants et modulaires appelés microservices. Chaque microservice est responsable d'une fonctionnalité spécifique, exécute son processus et communique avec d'autres services via des requêtes API.
L'architecture des microservices est parfois associée à des idées de réductionnisme, où de grandes idées complexes peuvent être décomposées en parties plus petites. La décomposition de chaque microservice et son objectif souvent spécifique permettent une flexibilité, des temps de réponse plus rapides et une évolutivité. Cela facilite le développement, la maintenance et l'évolution à mesure que votre application devient plus complexe.
Architecture basé sur les évènements et messages
L'architecture pilotée par les événements utilise les événements comme instrument central de communication entre les composants. Elle est généralement divisée en deux modèles de conception, la conception pilotée par les événements et la conception pilotée par les messages. Il est essentiel d'examiner séparément la conception pilotée par les événements et la conception pilotée par les messages. Commençons par la conception pilotée par les événements. Ce modèle permet aux composants de communiquer et de réagir aux événements déclenchés par le producteur d'événements. Un exemple pourrait être un client qui s'est connecté à ses pages d'historique de commandes et qui a besoin d'une liste de ses commandes précédentes. Ce modèle écoute un événement, puis répond de manière asynchrone.
MVVM
J'aime les principes du Manifeste pratique de MVVM : simplicité, aptitude au mélange, aptitude à la conception, aptitude à la testabilité. Il s'agit d'une description de très haut niveau et abstraite et c'est pourquoi vous pouvez trouver de nombreuses variantes de MVVM. Quel que soit le style MVVM que vous choisissez, gardez à l'esprit les responsabilités et les principes et tout devrait bien se passer. Essayez d'éviter la complexité. MVVM n'est pas une solution miracle et vous ne pouvez pas couvrir tous les scénarios avec un seul modèle de conception. Une implémentation MVVM peut convenir à une application mais pas à une autre. Par exemple, je construis mon architecture MVVM à partir de zéro pour chaque nouveau projet afin de garantir la meilleure adéquation.
Architecture Orienté Services
L'architecture orientée services organise les applications sous forme d'un ensemble de services modulaires et faiblement couplés qui communiquent à l'aide de protocoles standard. Chaque service est autonome, exécute des fonctionnalités spécifiques et expose une interface d'interaction. L'architecture orientée services permet le développement, le déploiement et la mise à jour de services de manière indépendante sans impacter la conception globale, favorisant ainsi la réutilisabilité, la flexibilité et la maintenabilité.
Pattern Repository
Le repository pattern fournit une couche d'abstraction entre la logique d'accès aux données et le reste de l'application sous-jacente. Il agit comme un pont entre les couches de mappage de domaine et de données. En bref, ce modèle sépare le stockage des données et l'accès aux données en fournissant un référentiel central qui gère le stockage, la récupération et l'interrogation des données.
Les référentiels encapsulent la récupération et le stockage des données, offrant une interface standardisée pour effectuer des opérations CRUD (Create, Read, Update, Delete). Ce modèle favorise la séparation des préoccupations, la maintenabilité et des tests plus faciles en découplant l'accès aux données de la source de données sous-jacente et en permettant un contrôle centralisé de la gestion des données.
Elle vient avec ses avantages et inconvénients, comme toute architecture
CQRS (Command Query Responsibility Segregation)
L'architecture CQRS (Command Query Responsibility Segregation) est un modèle de conception de logiciel qui sépare les opérations de lecture et d'écriture en modèles définis (composants) avec différentes interfaces pour la gestion des commandes (opérations d'écriture) et des requêtes (opérations de lecture). L'utilisation de cette séparation permet un traitement, un stockage et une mise à l'échelle plus optimisés pour différents types d'opérations. Ainsi, les performances globales, la maintenabilité et la flexibilité dans les applications complexes sont améliorées. CQRS est souvent utilisé avec Event Sourcing et d'autres modèles d'architecture pour créer des systèmes réactifs et évolutifs.
Domain Driven Design
Le Domain Driven Design (DDD) est un modèle d’architecture logicielle qui se concentre sur la création de logiciels en privilégiant une compréhension approfondie du domaine du problème (le domaine d’expertise ou d’activité que le logiciel vise à résoudre), de ses complexités et des exigences commerciales. En termes simples, il se concentre sur la compréhension du problème réel que vous essayez de résoudre et sur la création d’une solution logicielle bien organisée, facile à entretenir et flexible.
Filtres et Pipes
Le modèle Filtres et Pipes est un modèle de conception qui traite les données via une séquence de filtres disposés dans un pipeline. Chaque filtre exécute une tâche spécifique et transmet le résultat au filtre suivant dans le pipeline. Le modèle est couramment utilisé dans les systèmes de traitement de données et peut améliorer l'évolutivité et la maintenabilité des flux de travail de traitement de données complexes.
- Cloud
- Cloud Providers : AWS, Azure, Google Cloud Platform (GCP)
- Infrastructure as Code (IaC): Terraform, AWS CloudFormation, Azure Resource Manager
- API Gateway AWS API Gateway, Kong
- Service Mesh: Istio, Linkerd
- Serverless Frameworks: AWS Lambda, Azure Functions, Google Cloud Functions
- Monitoring: Prometheus, Grafana, ELK Stack, Datadog
- IOT
- Protocoles IOT: MQTT, CoAP, AMQP
- Edge Computing: AWS IoT Greengrass, Azure IoT Edge
- Brokeurs de messages: Mosquitto, RabbitMQ, Apache Kafka
- Base de données tems réels InfluxDB, Firebase Realtime Database
- Platformes IOT: AWS IoT Core, Azure IoT Hub, Google Cloud IoT Core
- Hardware: Arduino, Raspberry Pi, ESP8266
- Web
- Front-end: Angular, React
- Back-end Frameworks:: Terraform, AWS CloudFormation, Azure Resource Manager
- API GraphQL, RESTful APIs, gRPC
- Authentification / Authorisation: OAuth, OpenID Connect, JSON Web Tokens (JWT)
- Serveurs Web: Nginx, Apache
- Web Sockets: Socket.IO, SignalR
- Data
- Base de données: PostgreSQL, MySQL, MongoDB, Cassandra
- Entrepôt de données:: Terraform, AWS CloudFormation, Azure Resource Manager
- Data Lakes AWS S3, Azure Data Lake
- Outils ETL: Apache NiFi, Apache Airflow, Talend
- Big Data: Apache Hadoop, Apache Spark, Apache Flink
- Streaming: Apache Kafka, Apache Pulsar
- Visualisation: Tableau, Power BI, Looker
- IA
- Machine Learning: TensorFlow, PyTorch, Scikit-Learn
- Plateformes MLOps: Kubeflow, MLflow, TFX, Azure ML, Amazon SageMaker
- Feature Stores: Feast, Databricks Feature Store
- Déploiement de modèles: TensorFlow Serving, TorchServe, Docker, Kubernetes
- Experiment Tracking MLflow, Poids & Biais
- Streaming: Apache Kafka, Apache Pulsar
- Visualisation: Tableau, Power BI, Looker