4.1 Choix techniques - GonoGoat/projetIntegrationGrp6 GitHub Wiki

Introduction

Afin de réaliser notre projet, nous avons dû choisir quelles technologies utiliser dans chacun des domaines où cela est nécessaire. Nous allons ici mentionner chaque domaine de notre projet et la technologie correspondante que nous allons employer ainsi que sa justification.

Technologies

Front-end

Choix : React Native

Justification

  • React native est, comme son nom le dit, basé sur les composants natifs des User Interfaces iOS et Android. Cela permet un gain de temps et une base de code simplifiée et unifiée.
  • Un autre avantage avec React Native est la possibilité de rafraichir l'affichage de l'application beaucoup plus rapidement. En effet, cela évite une compilation complète et inutile après chaque modification du code source.
  • Le code source d'une application React Native est décomposé en composants modulaires et facilement testables. Ces composants sont égallement réutilisables pour plusieurs vue, ce qui permet d'alléger le cours et de modifier efficacement plusieurs pages. Il suffit de modifier le code du composant pour que toutes les pages de l'application qui utilisent ce dernier soient modifiées.

Back-End

Choix : Node.js

Justification

  • Notre application est en full stack javascript grâce a react que nous utilisons en front-end. Cela va nous permettre d'économiser du temps d'apprentissage et de ne pas séparer notre groupes au niveau des langages à utiliser. De plus tout le monde sera apte a comprendre le code et à le modifier/réparer.
  • La communauté Node.js semble très présente, ce qui implique que les informations seraient bien plus facile et rapide à trouver. C'est un des éléments principaux que nous recherchons en tant qu'étudiants, car la découverte et la manière d'apprentissage sont très importantes dans le développement.
  • Au niveau des "packages", la communauté Javascript est beaucoup plus présente que les autres, et cela serait potentiellement d'une grande aide pour nous car l'utilisation de packages simplifie quand même de manière conséquente la réalisation du code.
  • Node.js est également utilisé par un grand nombre de noms connus (tels que Netflix, Trello ou encore Paypal). Cela nous semble donc plus intéressant de nous familiariser avec ce dernier qu'avec d'autres application de back-end car à première vue, un back-end bien plus répandu sous-entend un gage de qualité, et ces grandes marques nous prouvent que de grands projets peuvent largement être basé sur un back-end Node.js.
  • Node.js est également très stable dans le sens où les créateurs ne souhaitent pas faire de conséquentes mises à jour qui "casseraient" les codes déjà créé ou changeraient trop les habitudes des développeurs.

Base de données

Choix : PostGre SQL

Justification

  • La documentation de PostgreSQL très claire et la communauté est très présente. Il est donc très facile de trouver des informations concernant l'installation, le développement ou encore le debugging pour cette base de données.
  • PostgreSQL facilite aussi la migration de base données ou encore de créer / récupérer des backups sur celui-ci que sur ses rivaux.
  • Contrairement à MySQL par exemple, PostgreSQL est totalement Open Source. En étant Open Source, cela permet de ne pas dépendre d'une entreprise en particulier, et d'évoluer parfaitement en fonction des demandes et des envies des développeurs. Il y a aussi une certaine fiabilité dans le sens où du jour au lendemain, aucune entreprise possédant PostgreSQL ne peut rendre celui-ci payant ou du moins le rendre en accès réduit, ce qui impliquerait que nous perdrions tout notre secteur de base de données dans notre site.
  • Énormément de frameworks et de librairies supportent PostgreSQL, au point où il est très difficile d'en citer un seul qui ne le supporte pas. Node.js faisant partie de tout ce groupe supportant PostgreSQL, il ne va donc pas être trop compliqué d'implémenter cette base de données dans notre projet.

Electronique

Choix : Arduino

Justification

Pour la réalisation de ce projet, il faut que notre porte soit connectée à internet pour pouvoir communiquer avec. Pour cela, nous avions donc besoin d'un moteur, d'un module wifi et d'un microcontrôleur qui fait le lien entre les deux. Pour ce dernier, nous sommes partis sur de l'Arduino en grande partie grâce à la documentation présente sur internet. En effet, la plupart des projets de domotique étant réalisé à l'aide d'Arduino, nous pouvons trouver énormément de documentation à ce sujet sur internet, ce qui nous aide clairement pour notre projet. De plus, Arduino est aussi réputé pour être fiable, ce qui est clairement un atout.

Service de conteneurisation

Choix : Docker

Justification

  • Modularité : L'approche de Docker en matière de conteneurisation repose sur la décomposition des applications : c'est-à-dire la capacité de réparer ou de mettre à jour une partie d'une application sans devoir désactiver l'ensemble de cette dernière. En plus de cette approche basée sur les microservices.

  • Couches et contrôle des versions d'image : Chaque fichier image Docker est composé d'une série de couches. Ces couches sont assemblées dans une image unique. Chaque modification de l'image engendre la création d'une couche. Chaque fois qu'un utilisateur exécute une commande, comme run ou copy, une nouvelle couche se crée. Docker réutilise ces couches pour la construction de nouveaux conteneurs, accélérant ainsi le processus de construction. Les modifications intermédiaires sont partagées entre les images, ce qui optimise la vitesse, la taille et l'efficacité. Qui dit superposition de couches, dit contrôle des versions. À chaque changement, un journal des modifications est mis à jour afin de vous offrir un contrôle total des images de votre conteneur.

  • Restauration : La fonction la plus intéressante de la superposition de couches est sans doute la restauration. Chaque image est composée de couches. Aussi, si l'itération actuelle d'une image ne convient pas, on peut restaurer la version précédente. Cette fonction favorise le développement agile.

  • Déploiement rapide : Pas besoin de redémarrer le système d'exploitation pour ajouter ou déplacer le conteneur d'un processus.