Les 3 principales méta stacks de la factory sont :
On peut ajouter a celles-ci les stacks mineurs :
Pour cette stack, il nous paraissait évident de partir sur du Javascript, qui est le langage front web par excellence.
Après plus de 6 ans d’utilisation, non seulement nous ne regrettons pas notre choix, mais il a, par ailleurs, été largement confirmé.
Concernant le framework javascript sur lesquel baser notre architecture, nous étions à la recherche de souplesse, d’un framework pouvant s’adapter à notre manière de faire, en grande partie héritée de notre expérience mobile.
Les 2 frameworks front de cette période étaient :
Bien qu’à l’époque Angular soit mieux installé que React, encore très jeune, nous trouvions Angular trop rigide et bien trop inspiré de la façon de faire du JEE.
Notre choix s’est donc porté sur React, le framework montant porté par Facebook, qui promettait de perdurer, de grandir et de gagner en importance dans les années à venir.
Nous avons également fait le choix de ne pas nous lier avec un framework de style comme :
Ceci permet d’offrir à nos client un expérience et un design qui leur est propre, sans leur imposer les contraintes associées aux limites d’un framework.
Nous avons acquis une bonne expérience dans la pratique du CSS, il nous est maintenant plus facile de construire un design de “0” en CSS que de passer par un framewok, sauf dans certain cas particuliers ou nous utilisons parfois MaterialUI.
Nous avons fait rapidement le choix de conteneuriser avec docker nos livrables, pour une facilité de déploiement, sans avoir a se soucier des versions en place sur les serveurs.
Notre stack front web est composé des technos suivantes :
| Nom | Description |
|---|---|
| Javascript / Typescript | Language de programmation spécialisé du front web, le second étant une version typée du premier |
| React | Framework JS de Meta, basé sur des composants réutilisables, il s’est imposé comme l’un des principaux framework front web de son temps |
| Redux | Librairie de gestion d’état globale, permettant de mettre en place notre architecture flux |
| Sccs / Sass | Librairie permettant de structurer et de clarifier l’écriture du CSS |
| Vite | Outil front-end JavaScript qui vise à améliorer la rapidité de développement en offrant un serveur de développement rapide et une compilation optimisée pour la production |
| Ky / Axios | Librairies de client HTTP pour navigateur |
Pour des questions de simplicité et de gestion des compétences, nous voulions partir sur une stack javascript / typescript pour le back api. Nous sommes donc partis sur un back NodeJS avec le framework ExpressJS. Celui-ci offre de bonnes performances, tout en restant simple et minimaliste. Cela nous permet ensuite de construire notre architecture propre architecture adaptée au besoin du projet et de ne pas être contraint par celle imposée par un éventuel framework.
Notre stack back api est composé des technos suivantes :
| Nom | Description |
|---|---|
| Javascript / Typescript | Language de programmation spécialisé du front web, le second est une version typée du premier |
| Node.js | Environnement d’exécution javascript, pour les applications serveurs. |
| Express | Framework d’API minimaliste, souple et rapide pour Node.js |
| PostgreSQL | Base de donnée relationnelle parmi les plus connus et performantes du marché. |
| Sequelize / TypeORM | ORMs, l’un pour javascript et l’autre pour typescript, permettant de communiquer simplement avec des bases de données. Tous deux permettent également d’écrire des requêtes SQL à la main et de faire des migrations. |
| Ky / Axios | Librairies de client HTTP pour Node.js |
| Docker / Docker-compose | Gestionnaire de conteneur, permettant d’encapsuler nos applications et de les déployer |
| S3 | Bucket type Amazone S3, permettant le stockage de fichier |
| Mocha / chai / sinon | Libraries permettant de tester nos applications Node.js |
| Swagger / RestHttp / Postman | Outils pour la documentation et le test live de nos APIs |
La stack CMS est divisée en deux segments : les CMS classiques et les CMS headless.
Les CMS classiques consistent en une solution globale offrant un back-office pour l’édition de contenu et une solution front pour son affichage à l’utilisateur final.
Notre unique technologie de CMS classique est Drupal, un CMS robuste apprécié pour sa stabilité et sa sécurité.
Un CMS headless consiste à fournir un back-office et une api qui peut ensuite être utilisé par n’importe quelle technologie permettant de développer une application front. Ils ont l’avantage d’offrir une plus grande flexibilité pour tout ce qui touche à la partie applicative et de permettre à plusieurs applications de consommer facilement le même flux en provenance du back-office.
Notre technologie de CMS Headless est Strapi que nous combinons avec une application JS (Svelte ou React).
La stack mobile est divisée en 2 parties, Android et iOS
Système d’exploitation mobile de Google, ce système est utilisé sur plus de 80% des appareils mobiles dans le monde.
Les applications Android natives peuvent être écrites dans 2 languages de programmation :
L’univers Android se compose également de plein de librairies, aidant lors du développement d’application, certaines proposées directement par Google, d’autres par des tiers.
En voici une liste non-exhaustive que nous utilisons :
| Nom | Description |
|---|---|
| Android | SDK de développement pour les applications Android, nous préconisons de maintenir uniquement les 5 dernières versions de manière glissante, cela représente en France 93.3% du parc |
| Kotlin | Langage de programmation recommandé par Google pour le développement des applications mobiles |
| Room | Librairie de persistance des données proposé par Google, room est construit au-dessus de SQLite |
| Coroutines | Librairie de gestion de la concurrence proposé par Google. |
| Flow | Construite au-dessus de Coroutine et proposée par Google, cette librairie permet de gérer des flux de données. |
| RxJava | Librairie permettant de composer des programmes asynchrones basés sur des événements en utilisant des séquences observables. |
| RxBinding | Librairie permettant de gérer les interactions de vue comme RxJava |
| Dagger | Librairie permettant de gérer l’injection de dépendance maintenue par Google. Elle est en cours de remplacement par la nouvelle librairie proposé par Google : Hilt |
| Hilt | Librairie, construit sur Dagger, permettant de gérer l’injection de dépendance |
| Ktor | Client Http pour Android, développé par les créateurs de Kotlin |
| Retrofit | Client Http pour Android, géré par des interfaces |
| Coil | Librairie de gestion des images avec chargement asynchrone et cache pour jetpack compose |
| Picasso | Librairie de gestion des images avec chargement asynchrone et cache |
| AppAuth | AppAuth est un SDK client pour les applications natives permettant d’authentifier et d’autoriser les utilisateurs finaux à l’aide d’OAuth 2.0 et d’OpenID Connect. Disponible pour les environnements iOS, macOS, Android et Native JS, il met en œuvre les meilleures pratiques modernes de sécurité et de convivialité pour l’authentification et l’autorisation des applications natives. |
| OsmDroid | Osmdroid est un remplacement (presque) complet/gratuit de la classe MapView (v1 API) d’Android. Il comprend également un système de fournisseur de tuiles modulaires prenant en charge de nombreuses sources de tuiles en ligne et hors ligne et une prise en charge des superpositions avec des superpositions intégrées pour tracer des icônes, suivre l’emplacement et dessiner des formes. |
| AltBeacon | Librairie ouverte permettant la gestion de balise de proximités (Beacons) |
| Leakcanary | Librairie de détections des fuites mémoires |
| Firebase | SDK permettant d’interagir de manière simplifié avec la plateforme Firebase de Google et les outils qu’elle propose |
| Mockito | Librairie de simulation (mock) pour Android |
| Espresso | Librairie de test unitaire pour Android |
Système d’exploitation mobile propre à la marque Apple qui concerne toutes les gammes d’appareils de types iPhone, iPod, iPad et les périphériques compatibles. Il est utilisé par les générations successives d’iPhone depuis la sortie du premier modèle en 2007 puis par l’iPad depuis 2010.
Les applications iOS peuvent être écrites avec 2 langages de programmation :
L’univers iOS se compose également de plusieurs de librairies, aidant lors du développement d’application principalement proposé par des tiers.
En voici une liste non-exhaustive que nous utilisons :
| Nom | Description |
|---|---|
| iOS | SDK de développement pour les applications iOS, nous préconisons de maintenir uniquement les 2 dernières versions de manière glissante, cela représente en France 98 % du parc |
| Swift5+ | Langage de programmation recommandé par Apple pour le développement des applications mobiles |
| UIKit | SDK originel de création de vue en iOS Apple le déprécie au profit de SwiftUI |
| SwiftUI | SDK sorti en 2019, il est assez mature depuis 2023 pour une intégration dans les applications de production. Il est voué à remplacer UIKit |
| CocoaPod | Librairie de gestion de dépendance aux librairies externes |
| XCTest | Créer et exécute des tests unitaires, des tests de performance et des tests d’UI pour votre projet Xcode. |
| Nom | Description |
|---|---|
| Keychain | Librairie de persistance des données. |
| SwiftLint | Outil de qualité de code. |
| Alamofire | Librairie HTTP pour iOS permettant de simplifier les appels réseaux. |
| AppAuth | AppAuth est un SDK client pour les applications natives permettant d’authentifier et d’autoriser les utilisateurs finaux à l’aide d’OAuth 2.0 et d’OpenID Connect. Disponible pour les environnements iOS, macOS, Android et Native JS, il met en œuvre les meilleures pratiques modernes de sécurité et de convivialité pour l’authentification et l’autorisation des applications natives. |
| Firebase | SDK permettant d’interagir de manière simplifiée avec la plateforme Firebase de Google et les outils qu’elle propose. |
| Quick/Nimble | 2 librairies permettant de simplifier le développement de tests unitaires |
TODO
TODO
| Stacks Principales | Stacks Secondaires | Stacks Tertiaires | Stacks non maitrisées |
|---|---|---|---|
| Front Web, Back API | Android | iOS, CV | CMS |
| Stacks Principales | Stacks Secondaires | Stacks Tertiaires | Stacks non maitrisées |
|---|---|---|---|
| iOS | Front Web | Android, Back API, CV | CMS |
| Stacks Principales | Stacks Secondaires | Stacks Tertiaires | Stacks non maitrisées |
|---|---|---|---|
| Android, Back API | Front Web, CMS | iOS | CV |