Aller au contenu

Technologies

illustration catégorie illustration.png

Docker

Docker permet d’isoler les différents processus de chaque application relative au projet dans des “conteneurs” séparés et de composer tout l’environnement de développement à partir de ces conteneurs avec l’aide de l'ordonnanceur docker-compose.

Docker est devenu extrêmement populaire ces dernières années dans le domaine de la conteneurisation et est un standard lorsqu’il s’agit de composer un environnement de développement.

Sa communauté grandissante maintient des images de conteneurs sur le docker hub, disponibles pour tous. Les images officielles de certains services (comme Apache, PHP, etc.) sont créées et maintenues par Docker et les créateurs/mainteneurs de ces mêmes services.

Un des atouts de docker-compose est de constituer un environnement de développement et de test (très pratique pour l’intégration continue) identique à la production en terme de versions de logiciels, de nombre d’instances de chaque service, etc. Ceci permet donc d’éviter un maximum de problèmes qui pourraient se produire dans un environnement et pas dans un autre.

Symfony

Symfony est un framework open source d’applications web réunissant une palette de composants très fournie répondant de manière performante à la plupart des problématiques rencontrées dans les applications web modernes.

Ce framework permet de construire une base de code saine, performante, évolutive et hautement maintenable. Sa réputation est excellente ce qui fait de lui l’un des frameworks PHP les plus utilisés, et rassemblant la plus grosse communauté en France. Ceci lui permet d’être en constante évolution, de toujours augmenter ses performances et sa sécurité.

Symfony est extensible via des “bundles”, qui sont des briques de code venant agrémenter les fonctionnalités du framework de base. Ces bundles sont pour la grande majorité open source et partagent la même communauté que le framework, il est alors possible de trouver un bundle pour la plupart des besoins non gérés par le framework de base et non spécifiques au métier (traitement d’images, communication avec des services tiers, …).

Symfony VS CMS

Symfony offre plusieurs avantages par rapport à l’utilisation d’un CMS du type Wordpress, Magento ou Drupal :

Léger et performant

Lors de la création d’un projet avec Symfony, le strict minimum est inclus. Il convient alors d’ajouter les différents composants nécessaires au projet au fur et à mesure que les besoins surviennent. Ceci a pour but d’avoir une application la plus légère possible et donc d’en accélérer l'exécution. Les CMS classiques comportent une multitude de modules qui ne seront jamais utilisés par le projet et qui ralentissent son utilisation.

Le métier avant tout

Symfony abstrait un maximum de problèmes techniques pour pouvoir se concentrer sur ce qui est vraiment important dans l’application : le code métier. Symfony permet de créer un code sur mesure, vraiment adapté aux problématiques du métier concerné. Mieux vaut coder simplement la fonctionnalité précise dont on a besoin plutôt que de trouver un plugin de CMS qui apportera une solution à peu près équivalente.

Agilité

Il est facilement possible de faire évoluer une application créée avec Symfony. Comme vu dans le point précédent, l’approche métier permet de créer de nouvelles fonctionnalités proches du métier plus simplement que sur un CMS classique.

Sécurité

Symfony intègre une sécurité efficace permettant d’éviter les attaques XSS, CSRF, etc. Les CMS classiques ont un inconvénient de taille : il est possible d’accéder aux administration de base (/wp-admin par exemple pour un Wordpress, ou /admin pour les autres). De ce fait et à cause de la nomenclature des URL connue de tous, un pirate peut utiliser des outils pour forcer une administration d’un CMS connu.

Structure claire

La structure et l’arborescence de fichiers de Symfony est conventionnée et semblable d’un projet Symfony à un autre. De ce fait, tout nouvel intervenant peut retrouver ses marques facilement, rendant la maintenance applicative plus fluide et efficace. Un développeur Symfony peut donc intervenir rapidement sur tout projet sans être perdu, même s’il n’en avait pas encore connaissance.

Testable

La création et l’exécution de tests unitaires (voir chapitre sur les tests) pour Symfony est très simple. Ceci permettra de couvrir un maximum de fonctionnalités afin d’éviter toute régression lors de mises à jour.

API First

L’approche API first a de nombreux avantages :

Séparation et de découplage total de la logique métier (côté serveur) et de l'UI (côté clients).

Toutes les fonctionnalités du site sont également disponibles – dès le départ – via une API web (et donc utilisables par les partenaires et clients). Grâce à l'API REST, tout type de client (app mobile native, client lourd Windows, objets connectés spécifiques...) est envisageable et la logique métier n'aura pas à être recodée.

La réalisation de SPA et d'applications mobiles est extrêmement simplifiée. Le code métier n'a pas à être dupliqué ou réimplémenté.

L'intégration avec des outils tiers internes (progiciels de gestion, CRM...) et la mise en place par la suite – si nécessaire – d'une architecture basée sur les microservices deviendra beaucoup plus aisée.

React Native

React Native permet de créer des applications mobiles multi-plateformes (iOS, Android) à l'aide du langage JavaScript et basées sur le framework React.

Les avantages par rapport à la création d'application en code natif sont les suivants :

  • Les applications produites avec React Native sont compatibles à la fois pour iOS et Android.
  • Le développement est basé sur le language JavaScript : langage très plébiscité dans le monde du web. De ce fait, les coûts de développement sont plus faibles et facilement maintenable.

L'avantage par rapport à l'utilisation de framework du type Ionic ou Cordova : la performance. Ionic et Cordova se basent sur l'utilisation de "WebView", c'est à dire que l'application tourne dans un navigateur Internet. React Native lui, permet de "transformer" le code en code natif au système, permettant des performances (et une expérience utilisateur) du niveau des applications natives.

Elasticsearch

Pour la recherche nous utilisons un logiciel dédié : Elasticsearch. C’est un moteur d’indexation et de recherche. La recherche ne se limite pas à trouver un mot dans un texte, il y a l’autocomplétion, les suggestions, la pertinence, etc. Elasticsearch est un logiciel spécialisé : il prend en compte les racines des mots, gère le singulier/pluriel, les fautes de frappe, donne du poids selon certains critères etc. Ces fonctionnalités sont disponibles pour chaque langue.

Il a une très bonne capacité d’extension et de personnalisation telles que la gestion des synonymes, fonctions personnalisées, etc. La Suite Elastic, comprenant Elasticsearch, Logstash et Kibana, serait utilisée afin de répondre aux problématiques de recherche, statistiques et logs.

Elasticsearch est un moteur de recherche fiable et très rapide pouvant indexer facilement des téraoctets de données et exécuter des recherches parmi celles-ci en quelques millisecondes.

Il y serait donc stockées toutes les informations du projet pouvant découler d’une recherche : produits, formules, pages statiques, etc.

Architecture Hexagonale

L’architecture hexagonale est une architecture logicielle permettant de découpler le code métier de l’application, son pilotage (page web, script, ...) et son infrastructure (base de données, services, ...).

Cela permet d’isoler le coeur de l’application, de le développer et le tester de manière indépendante. Un autre avantage est aussi de pouvoir changer d’infrastructure si nécessaire sans impacter le fonctionnement de l’application. Concrètement, ça se traduit entre autres par un système de couches intermédiaires entre le code du coeur de l’application et les autres couches logicielles. Ça regroupe au même endroit les modèles et la logique métier et offre une modularité puissante pour l’implémentation du fait qu’il n’y a pas d’adhérence entre le code métier et les choix techniques retenus.

RabbitMQ

Certaines tâches, telles que l’envoi d’un email ou l’enregistrement d’un événement métier en base de données, sont coûteuses en performances, en temps d'exécution et ralentissent le chargement des pages pour l’utilisateur final.

Afin de résoudre ce problème, les tâches qui ne nécessitent pas d’avoir une action instantanée seront donc exécutées de manière asynchrone.

Pour ce faire, l’outil RabbitMQ sera utilisé. RabbitMQ est un message broker, un service permettant de faire communiquer plusieurs applications entre elles via un système de queues de messages, quel que soit le langage de programmation utilisé par ces applications.

Cet article vous a-t-il été utile ?

1 utilisateurs sur 1 ont trouvé cet article pertinent.

Dites-nous en plus:

À suivre